VC++のデータ保存について

このQ&Aのポイント
  • VC++でプログラムを作成している初心者が、データの保存に関して問題を抱えています。リリースモードでの保存先の設定がうまくいかず、解決方法を探しています。
  • プログラムの動作としては、データの保存先を「名前をつけて保存」のコモンダイアログで指定し、それをクラスのフィールドに保存します。しかし、リリースモードでは保存先が正しく書き込まれず、エラーが発生します。
  • 保存先のパス名をpath.txtファイルに保存し、プログラムの起動時にこのファイルを読み込みます。しかし、リリースモードではパス名が正しく格納されず、読み込みエラーが発生します。
回答を見る
  • ベストアンサー

VC++のデータ保存について

 いつもお世話になっております。VC++でプログラムを作成しているプログラミング初心者です。環境はOSがWindowsXP、統合環境はVisualStudio2008Professionalを使用しています。  現在簡易な家計簿ソフトを製作しているのですが、データの保存がうまくいきません。プログラムの動作としては、データの保存先を「名前をつけて保存」のコモンダイアログで指定し、それをクラスのフィールドに保存します。更にそのクラスのフィールドから、Path.txtというファイルにpath名を保存します。プログラムの起動時にこのPath.txtを読み込み、その中身をクラスのフィールドにセットします。その後、「ファイルの読み込み」をメニューで選択する時に、クラスのフィールドを引数として、データを読み込む関数を呼び出します。  この方法で、デバックモードでは動作していたのですが、リリースモードではPath.txtにファイルの保存先が書き込まれず、うまく動作しませんでした。以下、関係のあると思われる所を抜粋しました。 *****ファイルの保存先path名の保存***** private: void Pathset() { StreamWriter^ writer2 = gcnew StreamWriter("path.txt");     // パスデータを書き込み writer2->WriteLine(this->report7->Pathname); // クラスのフィールドからデータを取り出し書き込み writer2->Close(); } *****Form1クラスの生成直後に、クラスのフィールドにpath名を格納する***** StreamReader^ reader2 = gcnew StreamReader("path.txt"); this->report7->Pathname = ""; this->report7->Pathname = reader2->ReadLine(); reader2->Close(); *****メニューでファイルの読み込みを選択したときの処理***** LoadCsvFile(this->report7->Pathname); // LoadCsvFileはファイルの読み込みを実行する関数  以上、長く拙い説明で申し訳ありませんが、原因が分かる方、よろしくお願いいたします。m(_)m

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

  • ベストアンサー
  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.1

*****ファイルの保存先path名の保存***** private: void Pathset() {   StreamWriter^ writer2 = gcnew StreamWriter("path.txt");     // パスデータを書き込み #ifndef _DEBUG   MessageBOx::Show( "Open Stream" ); #endif   writer2->WriteLine(this->report7->Pathname); // クラスのフィールドからデータを取り出し書き込み #ifndef _DEBUG   MessageBOx::Show( "WriteLine Stream" ); #endif writer2->Close(); #ifndef _DEBUG   MessageBOx::Show( "Close Stream" ); #endif } といった具合にして どこまで動いているのか確認してみましょう

watataku70
質問者

お礼

redfox63さん、こんにちは。回答ありがとうございました。(お礼が遅くなり申し訳ありません。m(_)m)  アドバイスいただいた方法を早速試してみました。なるほど、リリースモードでもこういう形でデバックが出来るのですね。勉強になりました。(^^)  デバックの結果、動作は正常である事が分かり、結局名前を付けて保存をした時に保存するpath名が、別のところに保存されていた事が原因でした。お手数をお掛けして申し訳ありませんでした。また何かありましたらよろしくお願いいたします。m(_)m

関連するQ&A

  • VC++2005 StreamReader

    以前、ここでテキストボックスに保存してあるテキストファイルの表示方法を教えていただきました。 そのときの回答では、読み込みたいファイル名をまずテキストボックスに入れてStreamReaderを使って他のテキストボックスに表示するというプログラムを教えていただきました。 そこで今回質問したいことは、最初にファイル名をテキストボックスに入れずにファイルを表示するのはどうすればよいのかということです。 以下に現在使っているプログラムを書きます。 よろしくお願いします。 textBox1->Text = "p12.txt"; ←この部分について StreamReader^ streamReader = gcnew StreamReader(textBox1->Text); textBox2->Text = streamReader->ReadToEnd();

  • StreamReaderで読み込んだテキストの行数

    テキストファイルを読み込んで行数文のクラスの配列を宣言したいと思っているのですが、 Wireless_unit Wireless_unit[32]; array<Wireless_unit_str^>^ Wireless_ID_str02 = gcnew array<Wireless_unit_str^>(32); 行数がわからないので、StreamReader^で宣言したreadで知る方法はありませんでしょうか? 下のような関数でファイルを読み込んでいます。 private: bool LoadCsvFile02( String^ path ) { StreamReader^ reader = gcnew StreamReader( path, System::Text::Encoding::GetEncoding("shift-jis")); ----(中略)------------------------------------------------

  • StreamReaderで読み込んだファイルの行数

    StreamReader^ reader = gcnew StreamReader( path, System::Text::Encoding::GetEncoding("shift-jis")); このreaderに20000行程度あるテキストファイルを読み込んだのですが、正確な行数を取得する方法はあるのでしょうか? どうぞ、ご教授よろしくお願い致します。

  • ファイルを読み込み各行の両端にダブルクオーテーションをつけて保存するには?

    お世話になります。 テキストファイルを読み込みファイルの各行の両端に"をつけたいのです。たとえば、 今日は友人と焼肉を食べに行った。 雨の中、外を歩くのはつらかったが、 久々に会える友達のため東京まででかけた。 という文があったとしてプログラムを通しての出力結果が "今日は友人と焼肉を食べに行った。" "雨の中、外を歩くのはつらかったが、" "久々に会える友達のため東京まででかけた。" というように出力されるようにしたいのです。 下記のコードを自分で考えてみましたが、テキストファイルに保存がうまくできませんでした。どうすればよろしいでしょうか? 教えてください。お願いします。 Dim Reader As New IO.StreamReader("C:\aa.txt") Do Until Reader.EndOfStream ListBox1.Items.Add(Chr(&H22) & Reader.ReadLine & Chr(&H22)) Loop Reader.Close() Dim dtmStart As DateTime = DateAdd(DateInterval.Second, 10, Now) Do While Now < dtmStart Application.DoEvents() Loop Dim Writer As New IO.StreamWriter("C:\bb.txt") Writer.WriteLine(ListBox1.Text) Writer.Close() End Sub

  • 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 といった感じでファイルを作成したらそこにテキストを保存するようにしたいのですが、「ファイルが使用中でアクセスできません」とエラーになります。 いろんなサイトで勉強してみたのですが、いまいち理由がわかりません。どなたか教えていただける方はいませんでしょうか?

  • ”System::IO::StreamReader”ってどういう意味ですか?

    Visual C++ 2008 Express Editionで、現在、600kバイト程度のバイナリファイルを読み込んで特定の番地のデータだけを取り出してそれをテキスト変換してテキストボックス内に表示させるというプログラムを作成しているのですが、このことをOKwaveでどのようにコーディングするかを教えてもらったところ、 System::IO::StreamReader^ sr=gcnew StreamReader(_T("sample.txt")); このような文を教えてもらったのですが、全く知識がなく何をやっているのかわかりません。 ”sr”というのは変数で、sample.txtからstreamReader関数でsample.txt内のデータをsr変数に 入れているという感じがしますが、”System::IO::StreamReader”とか”gcnew”とかの意味がよくわかりません。 どうかご教授お願いいたします。

  • 一時ファイルを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(); ご協力お願いします。

  • VC++でファイルへの書き込みについて

    VC++にて、ファイルへの書き込みを行っているのですが、どうもうまくいきません。 Form.h //ファイル->開く private: System::Void 開くOToolStripMenuItem_Click(System::Object^ sender, System::EventArgs^ e) { //開くダイアログ表示 OpenFileDialog^ dlg = gcnew OpenFileDialog(); dlg -> Filter = "CSV形式(*.csv)|*.csv|すべてのファイル(*.*)|*.*"; if (dlg -> ShowDialog() != System::Windows::Forms::DialogResult::OK){ return; } //CSV形式でファイルを読み込み LoadCsvFile( dlg -> FileName ); } //ファイルの読み込み private: bool LoadCsvFile( String^ path ){ //ファイルをオープン StreamReader^ reader = gcnew StreamReader( path, System::Text::Encoding::GetEncoding("shift-jis")); //ファイル読み込み String^ data; data = reader -> ReadLine(); st = from_cli(data); //dataをグローバル変数std::string = stに変換 reader -> Close(); return true; } //System::String -> std::string変換用 std::string from_cli(String^ input, Encoding^ encoding) { array<Byte>^ result = Encoding::Convert(Encoding::Unicode, encoding, Encoding::Unicode->GetBytes(input)); if ( result->Length != 0 ) { pin_ptr<unsigned char> pin = &result[0]; return std::string(reinterpret_cast<char*>(pin), result->Length); } return std::string(); } //ボタンクリックイベント private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) { std::ofstream ofs; ofs.open( "test.txt" ); ofs << st << std::endl; ……(1) ofs.close(); } csvファイルを読み込み後、ボタンクリックイベントを行ってもtext.txtの内容が書き変わりません。 (1)の部分をofs << "test" << std::endl;に変更したり、 button1_Click内で変数st2を宣言し、 ofs << st2 << std::endl;に変更すると、問題無くファイルへの書き出しが行えます。 文字コード等が関わっているのでしょうか? 御助言の程、よろしくお願いします。

  • C#でテキストファイルの更新がしたい

    C#でテキストファイルを読込み、特定の文字を置換して上書きしたいです。 StreamReaderで読み込んで、変数に退避し、StreamWriterで書くのは出来ると思いますが もっと簡単に、読み込んでRewriteのようなコーディングって出来ないのでしょうか? A.Txt あああ いいい ううう ↓ 【あああ】を【えええ】にしてA.Txtを上書き A.Txt えええ いいい ううう 何かいい方法があれば教えてください。 よろしくお願いいたします。

専門家に質問してみよう