Копирование файлов после закрытия приложения
Существует несколько способов копирования файлов: использование TFileStream
, с помощью TShFileOpStruct
, Windows.CopyFile
(по крайней мере, это то, что я нашел).
Когда я начинаю копирование файлов одним из упомянутых мной способов, приложение замораживается (активно только окно копирования файлов), а когда я закрываю приложение, копирование файлов также отменяется.
Можно ли копировать / перемещать файлы, чтобы процесс не зависел от моего приложения?
Я имею в виду, как я могу начать операцию копирования / перемещения, а затем закрыть свое приложение, и копирование / перемещение останется?
3 ответа
См. Сообщение @David, плюс... Когда я помню, где у меня было похожее требование, мне приходилось закрывать резервную копию некоторых данных на сетевом диске в приложении. Я просто установил для CloseAction значение caHide в обработчике OnClose и, таким образом, оставлял приложение загруженным до тех пор, пока поток, выполняющий копирование, не был завершен, после чего он вызвал ExitProcess(), чтобы окончательно отключиться.
Проблема этого простого подхода заключается в том, что пользователь может попытаться запустить еще одну копию приложения, пока старая все еще выполняет резервное копирование - это вызвало большие проблемы. Мы просто добавили параграф в руководство пользователя, чтобы охватить это, но какое-то лучшее решение, например. заставить новые экземпляры ждать при запуске, пока старые не закончили, было бы лучше. Похоже, что решение Дэвида о запуске отдельного процесса было бы лучше в этом отношении, мод. любое "вмешательство" между копией и запуском любого нового экземпляра приложения.
Для копирования в другое место даже после того, как вы закрыли свое приложение, вы можете попробовать это с помощью 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
проверьте эти ссылки также
написание пакетного файла для копирования файлов на основе даты
Все API-интерфейсы копирования файлов, о которых я знаю, выполняются в вызывающем процессе. Это означает, что когда вы завершаете процесс, копирование файла также будет прекращено.
Таким образом, чтобы гарантировать, что копирование файла продолжается после закрытия приложения, вам нужно будет запустить копирование файла из другого процесса. Вы можете создать простой процесс, который сделает всю работу, и передать ему аргументы командной строки, чтобы указать, какие файлы копировать.
Если вы просто хотите разморозить основное приложение во время копирования, вы можете создать отдельный поток для выполнения копирования файла.