CreateFile - AccessDenied когда существует папка
От: MuPoB  
Дата: 11.05.20 18:10
Оценка:
Привет!

Если при создании файла существует папка с таким именем, то CreateFile возвращает AccessDenied, а хотелось бы получать нормальный статус ошибки, например ERROR_ALREADY_EXISTS. Т.е. если я получаю AccessDenied, то чтобы проверить, существует ли объект с таким именем нужно вызвать например FindFirstFile, но в момент его вызова папку могут удалить, и тогда будет непонятно, почему был запрещён доступ. Есть ли какой-нибудь способ решить эту проблему?

Файл должен создаваться как CREATE_NEW, т.к. нужно именно создание нового файла. Хотя при CREATE_ALWAYS аналогично возвращается AccessDenied

Пример кода:

    BOOL b = CreateDirectory(L"D:\\tmp\\d", NULL);
    HANDLE h = CreateFile(L"D:\\tmp\\d", GENERIC_WRITE | GENERIC_READ, 0, NULL, CREATE_NEW, FILE_ATTRIBUTE_NORMAL, NULL);
    DWORD err = GetLastError();
    // err  == ERROR_ACCESS_DENIED
    // если сейчас вызвать FindFirstFile(L"D:\\tmp\\d), то папка уже может быть удалена, и непонятно почему не создался файл
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.