Не всегда срабатывает удалить каталог, потом создать с таким же именем

Необходимо удалить каталог со старым содержимым, создать такой же с новым содержимым, которое хранится в папке update.

 fs::remove_all("c:/temp/folder");
 fs::rename("c:/temp/update","c:/temp/folder");

При переименовании возникает ошибка, что каталог в существует. Размер каталога около ГБ. Программа посылает команды, а файловая система не успевает завершить удаление и копирование. Через раз такое бывает. И не только в с++. В cmd и java тоже самое.


Ответы (3 шт):

Автор решения: eri

Перед удалением переименуй каталог в old. Хоть это обычно и почти моментально дождитесь чтоб folder стал old( в линуксе inotify, в винде не знаю, но можно просто поспать в цикле) , потом переименутете апдейт в фолдер, а удаление можно оставить на потом или даже перенести в фон.

→ Ссылка
Автор решения: user7860670

Файловая система все успевает. Это поведение называется туннелирование.

→ Ссылка
Автор решения: rtuf20

Пробую делать так. Удаляю несуществующий каталог, и получаю успешный код возврата. Потом удаляю свой каталог пока не получу успешный код возврата. Сравниваю при каждом удалении код возврата с успешным. Пингую себя для задержки. Проверял на удалении исполняемого файла. Пока файл работает, удаление не происходит, идет ожидание в цикле. Как только файл отработал, программа его удаляет.

int main()
{
error_code codeOK;
error_code code2;
fs::remove_all("c:/fantom/fantom",codeOK);// получили успешный код

int i=0;
while (i==0)
{

system("ping -n 1 localhost > nul");

 fs::remove_all("c:/folder/1.exe",code2);
 if (codeOK==code2){//сравниваем коды пока не будет успеха
    i++;

 }
 } 
→ Ссылка