Копирование файлов после закрытия приложения - PullRequest
1 голос
/ 22 февраля 2012

Существует несколько способов копирования файлов: используя TFileStream, используя TShFileOpStruct, Windows.CopyFile (по крайней мере, это то, что я нашел).
Когда я начинаю копирование файлов одним из упомянутых мной способов, приложение замораживается (активно только окно копирования файлов), а когда я закрываю приложение, копирование файлов также отменяется.

Можно ли копировать / перемещать файлы, чтобы процесс не зависел от моего приложения?
Я имею в виду, как я могу начать операцию копирования / перемещения, а затем закрыть свое приложение, и копирование / перемещение останется?

Ответы [ 3 ]

2 голосов
/ 22 февраля 2012

См. Сообщение @David, плюс .. Когда я помню, где у меня было похожее требование, мне приходилось закрывать резервную копию некоторых данных на сетевом диске в приложении.Я просто установил для CloseAction значение caHide в обработчике OnClose и, таким образом, оставлял приложение загруженным до тех пор, пока поток, выполняющий копию, не завершился, после чего он вызвал ExitProcess () для окончательного прекращения работы.

Проблема этого простого подхода заключается в том, чтото, что пользователь мог попытаться запустить другую копию приложения, пока старая все еще делала резервные копии - это вызывало большие проблемы.Мы просто добавили параграф в руководство пользователя, чтобы охватить это, но какое-то лучшее решение, например.заставить новые экземпляры ждать при запуске, пока старые не закончатся, было бы лучше.Похоже, что решение Дэвида о запуске отдельного процесса было бы лучше в этом отношении, мод.любое «вмешательство» между копией и запуском любого нового экземпляра приложения.

1 голос
/ 22 февраля 2012

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

 xcopy d:\from_folder\*.* d:\Tofolder\.

это вы можете выполнить в пакетном файле и позволить вашему приложению закрыть, пакетный файл продолжит копирование файлов в место назначения.

вы можете использовать shellexecute для

 procedure MycopyAndCloseapplication;
    begin
       ShellExecute(handle,'open',pchar('d:\mycopyingBatch.bat'),nil,nil, SW_SHOWNORMAL) ;

    //here than you close your application..

    end; 

, чтобы скопировать папки, которые содержат больше папок внутри, попробуйте это

 xcopy d:\sourceFolder d:\destinationFolder /E /Y

проверьте эти ссылки также

запись командного файла для копирования файлов на основе fordate

команда прямого копирования командного файла

пакетный файл для копирования файлов в другое место

0 голосов
/ 22 февраля 2012

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

Таким образом, чтобы гарантировать, что копирование файла продолжается после закрытия вашего приложения, вам нужно будет запустить копирование файла с другогопроцесс.Вы можете создать простой процесс, который выполнил эту работу, и передать ему аргументы командной строки, чтобы указать, какие файлы копировать.

Если вы просто хотите разморозить основное приложение во время копирования, вы можете создатьотдельный поток для выполнения копирования файла.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...