- ベストアンサー
VC++でファイルへの書き込みについて
- VC++にて、ファイルへの書き込みがうまくいかない問題が発生しています。
- 特定のソースコードの部分を修正すると、問題なくファイルへの書き出しが行えることが分かりました。
- 文字コードや変数の宣言の方法に関係がある可能性があります。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
確認が必要な箇所が2点あります。 1つ目は、フルパスによる保存ができない件について。 > フルパスで指定するというのは、 > ofs.open("C:\Program Files\~~"); > で指定するということでしょうか? "C:\Program Files\~~"となっていますが、パスを文字列で指定する場合、 "C:\\Program Files\\~~"と指定するのが正解ですがそうなっていますでしょうか? もし、それでも出力できない場合、おそらく~~の中に日本語が入っていて、ロケールが日本語になっていない、というパターンだと思います。 もし知れが原因であれば、Form_Loadイベントに setlocale(LC_ALL,"Japanese"); のようにロケール設定処理を追加するとうまくいくと思います。 それでもフルパスによる出力がうまくいかないとなると、他には原因は思い当たらないです。 もう一点は、OpenFileDialog::ShowDialog関数を使用されていますが、この関数を使用するとカレントディレクトリが移動する場合がある、ということです。 上記の例で、単に、ofs.open( "test.txt" );と指定すると、それはOpenFileDialogで指定したファイルが保存されたディレクトリ内の test.txt を指定したことになります。 それでよければ問題ないのですが、実行ファイルとの相対パス上のファイルを指定したい場合、 System::Windows::Forms::Application::StartupPath + "\\" + "test.txt" 等で自分で相対パスから絶対パスに変換すると起動時のカレントディレクトリ上のtest.txtを指定することができます。
その他の回答 (1)
- titokani
- ベストアンサー率19% (341/1726)
>ofs.open( "test.txt" ); ここをフルパスで指定してみてもだめでしょうか?
お礼
おっしゃっている通りフルパス指定で解決しました。 相対パスを使ってみます。 ありがとうございました。
補足
フルパスで指定するというのは、 ofs.open("C:\Program Files\~~"); で指定するということでしょうか? これだと、ファイルが開けて無いのか、 ""で直接文字列を書き込んでもダメでした。 指定の仕方間違ってますでしょうか?
お礼
そうですよね。「\\」って入れないとダメですよね。 普通にコピペして貼り付けていました。お恥ずかしい。 qwertfkさんのおっしゃっている原因で間違いないです。 カレントディレクトリが移動してしまっていたようです。 ありがとうございました。 分かってみれば成程って思いますが、知識が無いとなかなか気付かないものですね。精進します。