Информация об изменениях

Сообщение Re: Ожидание завершения опеации ФС от 20.07.2017 11:43

Изменено 20.07.2017 13:30 EreTIk

Re: Ожидание завершения опеации ФС
Здравствуйте, Barbar1an, Вы писали:

B>толкнулся с такой проблемой что если

B>1. удалить папку
B>2. создать папку

B>то на этапе 2 иногда вызов завершается неудачей из-за как говорит инет асинхронности операций с файловой системой


А ошибка какая?

B>в итоге чтобы это обойти лучшее что я придумал — повторять 2 пока не получится, вроде работает но както тупо

B>есть ли лучше чтото?

Переименовывать директорию перед ее удалением, что бы она не занимало имя на ФС, пока все описатели не закроются.

P.S. Из экзотичного на Windows 10 Restone 1 и новее можно попробовать использовать POSIX-семантику удаления. Из wdm.h:
FileDispositionInformationEx, // 64


#define FILE_DISPOSITION_POSIX_SEMANTICS            0x00000002

typedef struct _FILE_DISPOSITION_INFORMATION_EX {
    ULONG Flags;
} FILE_DISPOSITION_INFORMATION_EX, *PFILE_DISPOSITION_INFORMATION_EX;
Re: Ожидание завершения опеации ФС
Здравствуйте, Barbar1an, Вы писали:

B>толкнулся с такой проблемой что если

B>1. удалить папку
B>2. создать папку

B>то на этапе 2 иногда вызов завершается неудачей из-за как говорит инет асинхронности операций с файловой системой


А ошибка какая?

B>в итоге чтобы это обойти лучшее что я придумал — повторять 2 пока не получится, вроде работает но както тупо

B>есть ли лучше чтото?

Переименовывать директорию перед ее удалением, что бы она не занимала имя на ФС, пока все описатели не закроются.

P.S. Из экзотичного на Windows 10 Restone 1 и новее можно попробовать использовать POSIX-семантику удаления. Из wdm.h:
FileDispositionInformationEx, // 64


#define FILE_DISPOSITION_POSIX_SEMANTICS            0x00000002

typedef struct _FILE_DISPOSITION_INFORMATION_EX {
    ULONG Flags;
} FILE_DISPOSITION_INFORMATION_EX, *PFILE_DISPOSITION_INFORMATION_EX;


UPD: Проверил ради интереса: на обычном NTFS-разделе использование флага FILE_DISPOSITION_POSIX_SEMANTICS приводит к ошибке STATUS_VOLUME_NOT_UPGRADED (== 0xC000029C)