0

関数からファイルの名前を取得し、それをcreateFileに渡す(createFileAに展開する)次のコードがあります。以前の質問では、file.c_str()を使用して、ファイル名をcreateFileAが使用するLPCTSTRに変換するように指示されました。ただし、createFileAが呼び出されるたびにファイルへのハンドルが無効になるため、これは機能しません。私は何が間違っているのですか?

string file = getFilename();
HANDLE hf = CreateFile(file.c_str(),GENERIC_READ | GENERIC_WRITE,(DWORD) 0,NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,(HANDLE) NULL);
if (hf == INVALID_HANDLE_VALUE)
   {
     MessageBox( hwnd,"CreateFile","Error", MB_OK);
   }
4

3 に答える 3

2

コンパイルされた場合、.c_str() は正しい型でなければなりません!

ERROR_INVALID_NAME の最も一般的な理由は、ファイル名に不正な文字が含まれているか、余分な「:」またはタブが含まれているか、予約済みのファイル名を使用していることです。ファイル名の値を確認してください

于 2012-06-01T17:12:22.077 に答える
0

次のコードを使用した場合、

std::stringstream ss; ss << "C:\ファイル名.txt" <

次に、ss.str() を実行して std::string を取得します。次に、 c_str() を実行して CreateFile に渡す場合

これは CreateFile では機能せず、根本的な原因を追跡するのは非常に困難ですが、その「endl;」はバッファにストリーミングされたため、パスは無効になります

エラー123無効なファイル名が常に報告されます

ワイド版でも発生。

于 2013-04-05T15:31:07.237 に答える
0

質問に対するコメントに基づいて、問題は、提供している名前に:. この文字は、Windows のファイル名には使用できず、問題の原因です。その文字を削除すると、コードは正常に動作するはずです

于 2012-06-01T17:13:05.240 に答える