Скопируйте файл, даже если место назначения существует (в Qt)

в QFile :: копия документация это говорит

Если файл с именем newName уже существует, copy () возвращает false
(т.е. QFile не будет перезаписывать его).

Но мне нужно скопировать файл, даже если место назначения существует. Для этого есть какой-нибудь обходной путь в Qt?

Удаление файла — очевидное решение, но оно вызывает состояние гонки …

17

Решение

if (QFile::exists("/home/user/dst.txt"))
{
QFile::remove("/home/user/dst.txt");
}

QFile::copy("/home/user/src.txt", "/home/user/dst.txt");
26

Другие решения

Очевидным решением, конечно, является удаление файла, если он существует, перед выполнением копирования.

Обратите внимание, однако, что это открывает код для классического состояние гонки, поскольку в типичной многозадачной операционной системе другой процесс может заново создать файл между ваши приложения удалять и копировать звонки. Это может привести к сбою копии, поэтому вам нужно быть готовым (и, возможно, повторить попытку удаления, но это может привести к необходимости подсчета, чтобы не тратить вечные попытки, и так далее).

15

Просто вызовите remove () перед копированием ();

4

Самая простая попытка, которую я могу придумать:

while !QFile::copy("/home/user/src.txt", "/home/user/dst.txt")
{
QFile::remove("/home/user/dst.txt");
}

Но это все еще не реальное решение, так как некоторые условия гонки — это вещи, которые не блокируют удаление.

В настоящее время я ищу способ обработки записи веб-страницы в качестве вывода, но без автоматического обновления, когда-либо перехватывающего между удалением и копией.

4
По вопросам рекламы [email protected]