1

CreateFileを使用して、最初にファイルを作成します。

HANDLE hFile = CreateFile (TEXT(fileName.str().c_str()),      
                  GENERIC_WRITE,          
                  0,                     
                  NULL,                   
                  OPEN_ALWAYS,            
                  FILE_ATTRIBUTE_NORMAL,  
                  NULL);             

CreateFileもう一度使用して同じファイルを再作成しようとすると、エラーにはなりませんか?

hFile = CreateFile (TEXT(fileName.str().c_str()),      
                  GENERIC_WRITE,          
                  0,                      
                  NULL,                   
                  CREATE_ALWAYS,             
                  FILE_ATTRIBUTE_NORMAL,  
                  NULL);              

CREATE_ALWAYSファイルがすでに作成されている場合は失敗 することを使用しているので、私は思ったでしょう。

4

3 に答える 3

1

いいえ、CREATE_ALWAYSフラグCreateFileを使用すると、ファイルがすでに存在する場合は上書きされます。目的を達成するには、CREATE_NEWを使用する必要があります。

于 2012-04-25T10:04:14.833 に答える
0

CREATE_ALWAYSはまさにそれを行い、常にそれを作成します。CREATE_NEWがすでに存在する場合、失敗します。

于 2012-04-25T10:04:50.853 に答える
0

MSDNフラグによると、 CREATE_ALWAYSは次のことを意味します。

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

したがって、ファイルがすでに存在する場合でも関数は失敗せず、成功しました。最後のエラーだけがERROR_ALREADY_EXISTSに設定されます。

于 2012-04-25T10:07:35.490 に答える