Can anyone explain what the difference is between the creation dispositions OPEN_ALWAYS
and CREATE_ALWAYS
of the CreateFile() function of the windows API?
To me it seems that they both simply 'create the file if it does not already exist'.
Can anyone explain what the difference is between the creation dispositions OPEN_ALWAYS
and CREATE_ALWAYS
of the CreateFile() function of the windows API?
To me it seems that they both simply 'create the file if it does not already exist'.
CREATE_ALWAYS
also truncates the contents if the file already exists. On the other hand, OPEN_ALWAYS
will not clobber an already existing file.
Here's how the different values work in tabular form:
| When the file...
This argument: | Exists Does not exist
-------------------------+------------------------------------------------------
CREATE_ALWAYS | Truncates Creates
CREATE_NEW +-----------+ Fails Creates
OPEN_ALWAYS ===| does this |===> Opens Creates
OPEN_EXISTING +-----------+ Opens Fails
TRUNCATE_EXISTING | Truncates Fails
OPEN_ALWAYS
or OPEN_EXISTING
is specified.) In both cases the file pointer will point to the beginning of the file. So, if you then start writing into that file, it will overwrite the beginning of the file and will not append it to the end of file. To change that use SetFilePointerEx
function with FILE_END
flag before writing. –
Unrestrained WriteFile
s ends up actually depends on the access mask, if you only ask for file-append it will write to the end of the file on NT. –
Lerner © 2022 - 2024 — McMap. All rights reserved.