0

私の C++ プロジェクトの一部として、WinAPI ファイル管理関数でファイル管理構造体を使用しています。一時ファイル名を検索するときOpenNewTempFile()、名前を生成する関数があり、構造体で別の関数を呼び出すだけでそれを開こうとしOpenFile()、ファイルが既に存在する場合は、別の名前でサイレントに (そして無限に) 再試行します。ループ)。これはOpenFile()であり、一時ファイルとして開かれていない場合にのみ、ファイルがすでに存在するというエラーが報告されます。

GetLastError() 奇妙な

ifブロックが実行されている理由を誰か説明できますか? の 2 番目の部分は&&true であってはなりません。ブロックがヒットすると、下の VS ドックに現在の変数が表示GetLastError()され、上のコンソール ウィンドウに何が返されるかを確認できます。これは私を少し混乱させています。

編集: 提案により、GetLastError を変数に格納しました。

GetLastError() が格納されたスナップ

...まあ、それだけでさらに疑問が生じます。なんで今80なの?

4

2 に答える 2

1

問題は、Windows に 2 つの「ファイルが既に存在します」というコードがあることだと思います。CreateFileドキュメントから:

CREATE_ALWAYS

常に新しいファイルを作成します。

指定されたファイルが存在し、書き込み可能な場合、関数はファイルを上書きし、関数は成功し、最後のエラー コードは ERROR_ALREADY_EXISTS (183)に設定されます。

指定されたファイルが存在せず、有効なパスである場合、新しいファイルが作成され、関数は成功し、最後のエラー コードはゼロに設定されます。

詳細については、このトピックの「備考」セクションを参照してください。

新しく作る

まだ存在しない場合にのみ、新しいファイルを作成します。

指定されたファイルが存在する場合、関数は失敗し、最後のエラー コードはERROR_FILE_EXISTS (80)に設定されます。

指定されたファイルが存在せず、書き込み可能な場所への有効なパスである場合、新しいファイルが作成されます。

フラグを (正しく)使用するCREATE_NEWので、80 コードが表示されることを期待する必要があります。

于 2012-10-18T10:22:28.697 に答える
0

なんで今80なの?

80 は「ファイルが存在する」ことを意味し、あなたの場合にそうであるCREATE_NEWかどうかを試みています。AsTemp == trueAsTemptrue

于 2012-10-18T10:14:20.557 に答える