в QFile :: копия документация это говорит
Если файл с именем newName уже существует, copy () возвращает false
(т.е. QFile не будет перезаписывать его).
Но мне нужно скопировать файл, даже если место назначения существует. Для этого есть какой-нибудь обходной путь в Qt?
Удаление файла — очевидное решение, но оно вызывает состояние гонки …
if (QFile::exists("/home/user/dst.txt"))
{
QFile::remove("/home/user/dst.txt");
}
QFile::copy("/home/user/src.txt", "/home/user/dst.txt");
Очевидным решением, конечно, является удаление файла, если он существует, перед выполнением копирования.
Обратите внимание, однако, что это открывает код для классического состояние гонки, поскольку в типичной многозадачной операционной системе другой процесс может заново создать файл между ваши приложения удалять и копировать звонки. Это может привести к сбою копии, поэтому вам нужно быть готовым (и, возможно, повторить попытку удаления, но это может привести к необходимости подсчета, чтобы не тратить вечные попытки, и так далее).
Просто вызовите remove () перед копированием ();
Самая простая попытка, которую я могу придумать:
while !QFile::copy("/home/user/src.txt", "/home/user/dst.txt")
{
QFile::remove("/home/user/dst.txt");
}
Но это все еще не реальное решение, так как некоторые условия гонки — это вещи, которые не блокируют удаление.
В настоящее время я ищу способ обработки записи веб-страницы в качестве вывода, но без автоматического обновления, когда-либо перехватывающего между удалением и копией.