- ベストアンサー
ファイルパスの指定方法についてのエラー
- C++ Builder2009でプログラムを行っている際に、テキストボックスのファイルパスを指定してファイル出力を行おうとした際にエラーが発生しました。
- エラーの内容は、UnicodeString型の変数をconst char *型に変換できないというものでした。
- ファイルパスをテキストボックスから渡す方法について教えていただきたいです。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
fopenを使うならAnsiStringに変換してからc_str()を使います。 FILE* fp = fopen(AnsiString(Edit1->Text).c_str(), "wb"); AnsiStringに変換できない文字列が含まれている場合、上の方法では処理に失敗するかもしれません。 その場合は_wfopenを使います。 FILE* fp = _wfopen(Edit1->Text.c_str(), L"wb"); 文字列を保存するならTFile.WriteAllText・TFile.WriteAllLines・TStreamWriter、バイト列を保存するならTFile.WriteAllBytesやTStreamWriterなどを使った方が簡単です。 C言語の関数ではなく、C++やC++Builderの関数やクラスを利用することをお勧めします。
その他の回答 (3)
- 山本 隆(@tyamamoto)
- ベストアンサー率60% (12/20)
No.3の「この回答へのお礼」欄の質問に対して回答します。 変数crcやtest_binについての情報が不足しているのではっきりしたことは言えませんが、もし保存するために変数crcやtest_binにデータを格納しているのであれば、変数crcやtest_binにデータを格納する前にTFile.WriteAllBytesやTStreamWriterなどで保存できるかもしれません。 「そのまま置き換える」のではなく、より簡単で簡潔に記述できる可能性があります。
- Tacosan
- ベストアンサー率23% (3656/15482)
そのエラーが出てからここで質問するまでに, どう考えて何を調べたんですか? エラーが出るたびに質問していては効率があまりにも悪いと思うんだけど....
- kmee
- ベストアンサー率55% (1857/3366)
マニュアルで、TextboxのTextメンバーの型が何なのか調べてください。 あなたは、その型のことも、その型の内容をconst char*として取り出す方法も知っているはずです。 過去の質問の中にあるのですから。
お礼
回答頂きありがとうございます。現在 FILE* fp = _wfopen(Edit2->Text.c_str(), L"wb"); fwrite(&crc,1,1,fp); fwrite(&test_bin,(151 * 4000),1,fp); fclose(fp); このようにbyte test_binというデータをファイル出力しているのですが、”TFile.WriteAllBytes”とか、”TStreamWriter”などでそのまま置き換えることは可能でしょうか?