Вам нужно dwCreationDisposition = TRUNCATE_EXISTING
. Это однако:
Открывает файл и усекает его, так что его размер равен нулю, только если
это существует. Если указанный файл не существует, функция завершается ошибкой
и код последней ошибки установлен в ERROR_FILE_NOT_FOUND (2).
вызывающий процесс должен открыть файл с битом GENERIC_WRITE, установленным как
часть параметра dwDesiredAccess.
Так что я бы попытался сначала открыть его с помощью TRUNCATE_EXISTING
. Если произойдет сбой с ERROR_FILE_NOT_FOUND
, откройте его с помощью CREATE_NEW
.
hFile = CreateFile(fname, GENERIC_WRITE, 0, NULL, TRUNCATE_EXISTING,
FILE_ATTRIBUTE_NORMAL, NULL);
if ((hFile == NULL) && (GetLastError() == ERROR_FILE_NOT_FOUND))
{
hFile = CreateFile(fname, GENERIC_WRITE, 0, NULL, CREATE_NEW,
FILE_ATTRIBUTE_NORMAL, NULL);
}
РЕДАКТИРОВАТЬ: Это не лучший способ сделать это. CREATE_ALWAYS
- это dwCreationDisposition
, который вы хотите использовать. См. Ответ Дэвида Хеффернана.