1

MSDNで検索しました

HANDLE WINAPI CreateFile(
  _In_     LPCTSTR               lpFileName,
  _In_     DWORD                 dwDesiredAccess,
  _In_     DWORD                 dwShareMode,
  _In_opt_ LPSECURITY_ATTRIBUTES lpSecurityAttributes,
  _In_     DWORD                 dwCreationDisposition,
  _In_     DWORD                 dwFlagsAndAttributes,
  _In_opt_ HANDLE                hTemplateFile
);

dwCreationDisposition==CREATE_ALWAYSまたはの場合OPEN_ALWAYS、それは言う

常に新しいファイルを作成します。指定されたファイルが存在し、書き込み可能な場合、関数はファイルを上書きし、関数は成功し、最後のエラー コードは ERROR_ALREADY_EXISTS (183) に設定されます。指定されたファイルが存在せず、有効なパスである場合、新しいファイルが作成され、関数は成功し、最後のエラー コードはゼロに設定されます。詳細については、このトピックの「備考」セクションを参照してください。

常にファイルを開きます。指定されたファイルが存在する場合、関数は成功し、最後のエラー コードは ERROR_ALREADY_EXISTS (183) に設定されます。指定されたファイルが存在せず、書き込み可能な場所への有効なパスである場合、関数はファイルを作成し、最後のエラー コードはゼロに設定されます。

したがって、関数が失敗した場合はどうGetLastError()なるかわかりませんERROR_ALREADY_EXISTSか?

もしそうなら、私に例を教えてください。

どうもありがとう。

4

2 に答える 2

2

素早い答え: いいえ。

指定された内容によると:

ERROR_ALREADY_EXISTSファイルが存在し、またはに設定され、が成功した場合にのみ、呼び出しGetLastError()の直後にによって返されます。CreateFile()dwCreationDispositionCREATE_ALWAYSOPEN_ALWAYSCreateFile()

CreateFile()で失敗した場合、またはCREATE_ALWAYSとしてOPEN_ALWAYS設定されたdwCreationDisposition場合GetLastError()、ファイルを開くことができなかった理由を示す適切な最終エラー コードを返しますが、ファイルがERROR_ALREADY_EXISTS存在するかどうかに関係なく、ユーザーがファイルを開くまたは作成することを明確に要求したためではありません。

これは、ファイルが存在するためにset toGetLastError()の呼び出しが失敗した場合の戻り値と混同しないでください。この場合、は返され、決して返されません。CreateFile()dwCreationDispositionCREATE_NEWGetLastError()ERROR_FILE_EXISTS ERROR_ALREADY_EXISTS

于 2016-08-05T09:46:35.243 に答える