アプリ版:「スタンプのみでお礼する」機能のリリースについて

C++ Builder2009でプログラムやってます。

テキストボックスEdit2-Textにファイルパスが入っているので、


fp = fopen( Edit2->Text , "wb" );


このようにしてファイル出力を行おうとしたら次のようなエラーが出てきました。


[BCC32 Error] Unit1.cpp(384): E2034 Cannot convert 'UnicodeString' to 'const char *'
[BCC32 Error] Unit1.cpp(384): E2342 Type mismatch in parameter '__path' (wanted 'const char *', got 'UnicodeString')


エラー内容だと”Edit2-Text”はUnicodeString型なので、fp = fopen にはconst char *っていう型にしないといけないという意味だと思うのですが、fopenでファイルパスをテキストボックスから渡すにはどのようにしたらよいか、ご教授よろしくお願い致します。

A 回答 (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の関数やクラスを利用することをお勧めします。
    • good
    • 0
この回答へのお礼

回答頂きありがとうございます。現在

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”などでそのまま置き換えることは可能でしょうか?

お礼日時:2013/08/16 17:28

No.3の「この回答へのお礼」欄の質問に対して回答します。



変数crcやtest_binについての情報が不足しているのではっきりしたことは言えませんが、もし保存するために変数crcやtest_binにデータを格納しているのであれば、変数crcやtest_binにデータを格納する前にTFile.WriteAllBytesやTStreamWriterなどで保存できるかもしれません。
「そのまま置き換える」のではなく、より簡単で簡潔に記述できる可能性があります。
    • good
    • 0

そのエラーが出てからここで質問するまでに, どう考えて何を調べたんですか?



エラーが出るたびに質問していては効率があまりにも悪いと思うんだけど....
    • good
    • 0

マニュアルで、TextboxのTextメンバーの型が何なのか調べてください。



あなたは、その型のことも、その型の内容をconst char*として取り出す方法も知っているはずです。
過去の質問の中にあるのですから。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!