ディレクトリの作成に使用する関数があります。CreateDirectoryA()を使用します
CreateDirectoryは失敗したと報告しますが、GetLastError()を使用してエラーコードを確認すると、ERROR_SUCCESSと報告されます
コード:
BOOL isDirCreated = CreateDirectoryA(dirName.c_str(), NULL);
DWORD dw = GetLastError();
if (isDirCreated) {
if (!SetFileAttributesA(dirName.c_str(), attributes)) {
printf("SetFileAttributes() %s failed with (%d)", dirName.c_str(), GetLastError()));
return;
}
} else {
printf("CreateDirectory() %s Failed with (%d)", dirName.c_str(), dw));
if(ERROR_ALREADY_EXISTS != dw) {
return;
}
}
これは次を返します:(関数への複数の呼び出し)
CreateDirectory() testDir Failed with (0)
CreateDirectory() testDir\dir Failed with (183)
CreateDirectoryAがfalseを返しても、ディレクトリは作成されます。失敗は、関数の最初の呼び出しで常に発生します。以降のすべての呼び出しは、期待どおりに機能します。
ディレクトリの作成に成功したときにCreateDirectoryがfalseを返す理由についてのアイデア。
これは同様の投稿ですが、解決策は私には機能しません:
ReadFile()は失敗したと言っていますが、エラーコードはERROR_SUCCESSです
UPDATE このエラーは、コードに含まれている別のヘッダーに関数 "GetLastError"があり、他の関数が別の名前空間にあるため、次のようにGetLastErrorを呼び出すことが原因であることが判明しました。
/*
* the :: will tell it to use the GetLastError that is available on the global
* scope. Most of Microsoft's calls don't have any namespace.
*/
DWORD dw = ::GetLastError();