Ожидание завершения опеации ФС
От: Barbar1an Украина  
Дата: 20.07.17 11:28
Оценка:
толкнулся с такой проблемой что если
1. удалить папку
2. создать папку

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

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

есть ли лучше чтото?
Я изъездил эту страну вдоль и поперек, общался с умнейшими людьми и я могу вам ручаться в том, что обработка данных является лишь причудой, мода на которую продержится не более года. (с) Эксперт, авторитет и профессионал из 1957 г.
Re: Ожидание завершения опеации ФС
От: EreTIk EreTIk's Box
Дата: 20.07.17 11:43
Оценка:
Здравствуйте, 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)
Отредактировано 20.07.2017 13:30 EreTIk . Предыдущая версия . Еще …
Отредактировано 20.07.2017 11:44 EreTIk . Предыдущая версия .
Re[2]: Ожидание завершения опеации ФС
От: Barbar1an Украина  
Дата: 20.07.17 11:52
Оценка:
Здравствуйте, EreTIk, Вы писали:

ETI>Здравствуйте, Barbar1an, Вы писали:


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

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

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


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


уже не помню, а воспроизвести нажедно не получается

я использую std , но я читал что от обвертки не зависит

    
    std::experimental::filesystem::remove_all(TmpFolder);
    while(1)
    {
        std::error_code e;
        std::experimental::filesystem::copy(OriginFolder, TmpFolder, std::experimental::filesystem::copy_options::recursive);
        if(e) // wait for remove_all
        {
            Sleep(1);
            continue;
        }
        break;
    }
Я изъездил эту страну вдоль и поперек, общался с умнейшими людьми и я могу вам ручаться в том, что обработка данных является лишь причудой, мода на которую продержится не более года. (с) Эксперт, авторитет и профессионал из 1957 г.
Re: Ожидание завершения опеации ФС
От: CEMb  
Дата: 21.07.17 04:39
Оценка:
Здравствуйте, Barbar1an, Вы писали:

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

B>1. удалить папку

По-моему, WaitForSingleObject может ждать хэндлы файлов. По крайней мере когда-то я это использовал, чтобы ждать закрытие файла.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.