一時ファイルを保存する方法とは?

このQ&Aのポイント
  • C#で一時ファイルを保存する方法について説明します。
  • プログラム上でコメントアウトした方法ではなく、一時ファイルを作成してダイアログで保存先を選択する方法を紹介します。
  • 具体的なコード例を示しながら、一時ファイルの作成と保存ダイアログの表示方法を説明します。
回答を見る
  • ベストアンサー

一時ファイルをsavefileDialogを利用して保存するにはどのようにしたら良いのでしょうか?

環境:VS2005 C# プログラム上でコメントアウトしてある様なやり方ではなく、 一旦、一時ファイルを作成しそのファイルをダイアログで保存先を任意のフォルダに保存したいのですがやり方はあるのでしょうか? OpenFileDialog ofd = new OpenFileDialog(); //一時ファイルを作成する string file_name = Path.GetTempFileName(); System.IO.StreamWriter writer = new StreamWriter(file_name); writer.WriteLine("tmptest"); writer.Close(); //ダイアログを表示 ofd.ShowDialog(); /*******************************▼コメントアウト System.IO.Stream stream; stream = ofdfilecommit.OpenFile(); if (stream != null) { //ファイルに書き込む System.IO.StreamWriter sw = new System.IO.StreamWriter(stream, 文字コード); sw.WriteLine("test"); //閉じる sw.Close(); stream.Close() } ********************************▲コメントアウト*/ //オブジェクトの破棄 ofd.Dispose(); ご協力お願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • meru_dis
  • ベストアンサー率100% (1/1)
回答No.1

単純にsavefileDialogを利用して保存するには //##### ソース ##### // 変数の初期化 string fname = ""; string url = ""; // ファイル名 保存場所を指定させる DialogResult result = saveFileDialog.ShowDialog(); if (result == DialogResult.OK) { // コピー元のファイルのパス url = "一時ファイルのパス"; // コピー先のファイル名、パスを格納 fname = saveFileDialog.FileName; // ファイルのコピー処理 FileSystem.CopyFile(url, fname, UIOption.AllDialogs, UICancelOption.DoNothing); } このような感じで保存した一時ファイルをコピーもしくは移動してあげればいいのではないでしょうか? 上記のまま使うのであれば、"Microsoft.VisualBasic.FileIO"をusingしないと駄目ですけど…。 的外れでしたらごめんなさい。

tyometyoki
質問者

お礼

meru_dis様ありがとうございます。 1.savefileDialogからしていされたパスを取得する。 2.一時ファイルを指定されたパスにコピーする。 3.一時ファイルの削除する。 1~3の手順で実現できました。 ただこの様な手法は行儀がいいのかなぁ?なんて思っています。

関連するQ&A

  • VB2008 txtファイル保存

    こんにちは、Vb2008を勉強しています。 デスクトップに保存している、TXTファイルに、 フォームで入力したデータを追加保存したいと思い、ネットで調べたり…で 入力しましたが、txtファイルを開いてみると文字化けしてしまします。 Dim writer As System.IO.FileStream = _ System.IO.File.OpenWrite("C:\Users\Desktop\顧客管理.txt") 'SystemWriterオブジェクトを作成し、テキストデータが書き込めるようにする Dim sw As System.IO.StreamWriter = New System.IO.StreamWriter(writer) 'ファイルの末尾に移動する sw.BaseStream.Seek(0, System.IO.SeekOrigin.End) 'データを書き込む sw.WriteLine(TextBox1.Text & "," & TextBox2.Text & "," & TextBox3.Text) 'ファイルを更新する sw.Flush() 'ファイルを閉じる sw.Close() writer.Close() 上記の方法で文字化けだったので、またまた、調べて入力しましたが 今度は、改行されず…単純な、データの追加のようになってしまっています。 私は、新しい行に追加できるようにしたいです。 下のコードは文字コードの指定をしたので、保存はできますが、 改行されません。 Dim FileName As String = "C:\Users\Desktop\確認.txt" Dim Writer As IO.StreamWriter Dim Encode As System.Text.Encoding '文字コードにShiftJISを指定。 Encode = System.Text.Encoding.GetEncoding("Shift-JIS") '既に存在するテキストに追加する場合は第2引数をTrueにする。 Writer = New IO.StreamWriter(FileName, True, Encode) Writer.Write(TextBox1.Text & "," & TextBox2.Text) Writer.Close() どなたか、教えていただけませんでしょうか?

  • ファイルの作成からその使用に際して

    VB2008Expressでプログラミング中です。 早速ですが、この度ボタンを押すと3種の.txtファイルを作成し、ある文字列をそこに保存する、といったプログラムが必要になったのですが不具合がでて困っています。 sub createfile() IO.file.create("d:\1.txt") IO.file.create("d:\2.txt") IO.file.create("d:\3.txt") end sub private sub button_click()handles button1.click call createfile() Dim Writer As New IO.StreamWriter("d:\1.txt") Writer.WriteLine(Richtextbox1.Text) Writer.Close() Dim Writer As New IO.StreamWriter("d:\2.txt") Writer.WriteLine(Richtextbox2.Text) Writer.Close() Dim Writer As New IO.StreamWriter("d:\3.txt") Writer.WriteLine(Richtextbox3.Text) Writer.Close() end sub といった感じでファイルを作成したらそこにテキストを保存するようにしたいのですが、「ファイルが使用中でアクセスできません」とエラーになります。 いろんなサイトで勉強してみたのですが、いまいち理由がわかりません。どなたか教えていただける方はいませんでしょうか?

  • 重複データを書き込まないようにするには?(VB)

    VB(2010)初心者です。 ボタンクリックで、テキストボックスに入力したデータをテキストファイルに 追加書き込みしていますが、同じデータは書き込めないようにしたいです。 下記コードにどのような記述を付け加えたら良いのでしょうか。 Dim fsFile As System.IO.FileStream = System.IO.File.OpenWrite("C:\List.txt") Dim sw As System.IO.StreamWriter = New System.IO.StreamWriter(fsFile) sw.BaseStream.Seek(0, System.IO.SeekOrigin.End) sw.WriteLine(TextBox1.Text) sw.Flush() sw.Close() fsFile.Close()

  • 【VC++2005(CLR)】ファイル書き込み時、他でファイルが開かれていると落ちる

    いつも大変お世話になっています。 VC初心者です。 現在、ファイル書き込み処理で悩んでいます。 他のユーザがファイルをオープンしてたり、開こうとすると 落ちてしまいます。 たとえば、ファイルが開かれていることを検知して、 ユーザに「ファイルを閉じてください」とメッセージを出した後、 再度書き込み処理を実行できませんでしょうか。 (書き込み中は他のユーザからのアクセスを拒否させたいです。) 現在以下のようなソースを書いています。 //ファイルオープン System::IO::StreamWriter^ sw = gcnewSystem::IO::StreamWriter( path_w,false,System::Text::Encoding::Default); //ファイル書き込み String^ newData = "aaa"; sw->WriteLine(newData); //ファイルクローズ sw->Close(); お手数ですが、よろしくお願いします。

  • .NETで文字列のエンコードの仕方+ファイル操作

    .NETで文字列のエンコードの仕方が知りたいです。 あと、ファイル操作についてわかりやすいホームページを探しています。 '指定したファイルに文字列を追加します Dim filename as String = "test.txt" Dim data as string = "美味ソ溝" System.IO.File.AppendAllText(filename, data, System.Text.Encoding.GetEncoding("euc-jp")) 'これと同じことを以下のStreamWriterでしたいのですが、文字のエンコードの方法がわかりません。どのようにすればうまくいきますか。 Dim filename as String = "test.txt" Dim data as string = "美味ソ溝" Dim fs As System.IO.FileStream = System.IO.File.OpenWrite(filename) Dim sw As System.IO.StreamWriter = New System.IO.StreamWriter(fs) sw.BaseStream.Seek(0, System.IO.SeekOrigin.End) '書き込む前にエンコード?? sw.WriteLine(data) sw.Flush() sw.Close() fs.Close()

  • VB.NET テキストファイルにデータを書き込み

    テキストファイル("c:\test.txt")に「かきくけこ」と全角5文字で1行のデータがあるとします。 このテキストファイルに「あいうえお」を先頭に追加で書き込みたいのですが、どうすればいいのでしょうか? あくまで「かきくけこ」を変数化せずファイルに直接、書き込む方法がある場合、教えてください。 'テキストファイルを開いたときの内容 あいうえお かきくけこ ちなみにですが、テキストファイル("c:\test.txt")に「かきくけこ」と全角5文字で1行のデータがあるとして、 末尾に「さしすせそ」を追加で書込みする方法は下記の通りでした。 'ファイルを書き込み用に開く、指定したファイルがない場合は作成する dim fsFile As System.IO.FileStream = _ System.IO.File.OpenWrite("c:\test.txt") 'StreamWriterオブジェクトを作成し、テキストデータが書き込めるようにする Dim sw As System.IO.StreamWriter = _ New System.IO.StreamWriter(fsFile) 'ファイルの末尾に移動する sw.BaseStream.Seek(0, System.IO.SeekOrigin.End) 'データを書き込む sw.WriteLine("さしすせそ") 'ファイルを更新する sw.Flush() 'ファイルを閉じる sw.Close() fsFile.Close() 'テキストファイルを開いたときの内容 かきくけこ さしすせそ

  • C# StreamReader,StreamWriter による文字化

    C# StreamReader,StreamWriter による文字化け お世話になります。 文字化けで悩んでいます。 Visual Studio 2008 C# にて、テキストファイルからデータを読んで別のテキストファイルに そのまま書き出す(もちろん実際の運用では加工するわけですが)処理で文字化けが起こります。 そのテキストファイル自身を C# で作れば問題はないのですが、メモ帳を使って書き込んだファイルでは 文字化けが起こります。 対処方法があれば教えてください。 以下はその実験に使ったコードです。 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.IO; namespace ConsoleApplication5 { class Program { static void Main(string[] args) { // これは正常に書き込みできました StreamWriter sw = new StreamWriter(Environment.GetFolderPath(Environment.SpecialFolder.Desktop) + @"\test.txt"); sw.WriteLine("これはてすとです。"); sw.WriteLine("This is test."); sw.Close(); // これも正常に読み込め、書き込みもできました StreamReader sr = new StreamReader(Environment.GetFolderPath(Environment.SpecialFolder.Desktop) + @"\test.txt"); sw = new StreamWriter(Environment.GetFolderPath(Environment.SpecialFolder.Desktop) + @"\newtest.txt"); while (!sr.EndOfStream) { sw.WriteLine(sr.ReadLine()); } sr.Close(); sw.Close(); // 次はあらかじめメモ帳で作ったファイルを読んで、別のファイルに書き出します // これが文字化けします sr = new StreamReader(Environment.GetFolderPath(Environment.SpecialFolder.Desktop) + @"\test2.txt"); sw = new StreamWriter(Environment.GetFolderPath(Environment.SpecialFolder.Desktop) + @"\newtest2.txt"); while (!sr.EndOfStream) { string dat = sr.ReadLine(); sw.WriteLine(dat); Console.WriteLine(dat); } sr.Close(); sw.Close(); } } }

  • C#でのcsv保存

    今,下記のようなプログラムを組んでいます.ですが,うまくdataGridviewのデータが保存されません.何がいけないのでしょうか?だれかご教授よろしくお願いいたします. int R,C; R = dataGridView1.RowCount - 1; C = dataGridView1.ColumnCount - 1; string[] cdata = new string[R]; //string Ter =Convert.ToString(R); //string Tec = Convert.ToString(C); //textBox1.Text = Ter; //textBox2.Text = Tec; for (int Gdata = 1; Gdata < R; Gdata++) { string c = Convert.ToString(dataGridView1.Rows[Gdata].Cells[0].Value); cdata[Gdata] = c; //saveFileDialog1.Filter = "csvファイル (*.csv)|*.csv"; //if (saveFileDialog1.ShowDialog() == DialogResult.OK) //{ // int cdata = Convert.ToInt16(c); // cdata.saveNewCSVdata(saveFileDialog1.FileName); //} } //SaveFileDialogクラスのインスタンスを作成 SaveFileDialog sfd = new SaveFileDialog(); //ダイアログを表示する if (sfd.ShowDialog() == DialogResult.OK) { //OKボタンがクリックされたとき //選択された名前で新しいファイルを作成し、 //読み書きアクセス許可でそのファイルを開く //既存のファイルが選択されたときはデータが消える恐れあり System.IO.Stream stream; stream = sfd.OpenFile(); if (stream != null) { //ファイルに書き込む System.IO.StreamWriter sw = new System.IO.StreamWriter(stream); sw.Write(cdata); //閉じる sw.Close(); stream.Close(); } }

  • ファイルに追記していくには?

    お世話になります。 vb2005を使用しております。 Dim Writer As New IO.StreamWriter("C:\VTest.txt") Writer.WriteLine(TextBox1.Text) Writer.Close() for loopでまわすたびにtextbox1の内容がかわるというfor loopの中にこのようなコードを記述しているのですが、これだと追記できず上書きされてしまって困っています。追記する形にするにはどうすればよろしいでしょうか?教えてください。お願いします。

  • ASP.NETでStreamWriterクラスを使ってファイルに書き込む時にアクセスエラーが出ます

    ASP.NETでStreamWriterクラスを使い、abc.txt(中身は空です)に書き込みをしたいと思っていますが、Page_Loadイベントハンドラを使っても、ボタンClickイベントハンドラを使っても、ファイルにアクセスするときにエラーが出てしまいます。 ブラウザのエラーは以下の通りです。 '/kensyu' アプリケーションでサーバー エラーが発生しました。 パス "C:\abc.txt" へのアクセスが拒否されました。 また、イベントハンドラ内のコードは以下の通りです。 Dim sw As New System.IO.StreamWriter("C:\abc.txt") sw.WriteLine("Hello") sw.WriteLine("World") sw.Close() エラー内容を読む限りではabc.txtのプロパティにユーザを追加しろ、とあるように読めるのですが、追加ができません・・・ネットでも調べてみましたがわかりませんでした。解決方法をご存知の方がいらっしゃいましたら、どうぞよろしくお願いいたします。

専門家に質問してみよう