У меня был следующий код, который выполнялся каждые две минуты в течение всего дня:
int sucessfully_deleted = DeleteFile(dest_filename);
if (!sucessfully_deleted)
{
// this never happens
}
rename(source_filename,dest_filename);
Раз в несколько часов переименование () завершалось с ошибкой errno = 13 (EACCES).Все файлы находились в каталоге DropBox, и я догадывался, что причиной может быть DropBox.Я подумал, что вполне возможно, что функция DeleteFile () может возвращать с ненулевым success_deleted, но на самом деле DropBox все еще может быть занята чем-то, связанным с удалением, которое препятствовало успешному выполнению rename ().Затем я изменил rename () на my_rename (), который будет пытаться переименовать (), а в случае любой ошибки будет Sleep () в течение одной секунды и попытаться во второй раз.Конечно же, это сработало отлично с тех пор.Более того, я получаю диагностическое сообщение, отображающее ошибки при первой попытке каждые несколько часов.Он никогда не подводил со второй попытки.
Таким образом, вы могли бы сказать, что проблема полностью решена ... но я хотел бы понять, что может происходить, чтобы лучше защитить себя от любых связанных проблем DropBoxв будущем ...
Действительно, я хотел бы, чтобы новая функция super_delete () не возвращалась, пока файл не будет правильно удален и завершен во всех отношениях.