Не всегда срабатывает удалить каталог, потом создать с таким же именем
Необходимо удалить каталог со старым содержимым, создать такой же с новым содержимым, которое хранится в папке update.
fs::remove_all("c:/temp/folder");
fs::rename("c:/temp/update","c:/temp/folder");
При переименовании возникает ошибка, что каталог в существует. Размер каталога около ГБ. Программа посылает команды, а файловая система не успевает завершить удаление и копирование. Через раз такое бывает. И не только в с++. В cmd и java тоже самое.
Ответы (3 шт):
Перед удалением переименуй каталог в old. Хоть это обычно и почти моментально дождитесь чтоб folder стал old( в линуксе inotify, в винде не знаю, но можно просто поспать в цикле) , потом переименутете апдейт в фолдер, а удаление можно оставить на потом или даже перенести в фон.
Файловая система все успевает. Это поведение называется туннелирование.
Пробую делать так. Удаляю несуществующий каталог, и получаю успешный код возврата. Потом удаляю свой каталог пока не получу успешный код возврата. Сравниваю при каждом удалении код возврата с успешным. Пингую себя для задержки. Проверял на удалении исполняемого файла. Пока файл работает, удаление не происходит, идет ожидание в цикле. Как только файл отработал, программа его удаляет.
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++;
}
}