Убедитесь, что файл успешно скопирован с помощью c # - PullRequest
1 голос
/ 22 мая 2011

Я создаю приложение для резервного копирования файлов из исходного каталога в целевой каталог. Я храню информацию о файлах из исходной и целевой папок в отдельных списках, затем сравниваю списки по размеру, дате изменения и т. Д., Чтобы узнать, какие файлы необходимо скопировать.

В любом случае, дело в том, что я получаю список файлов, которые нужно скопировать, и мне хотелось бы знать, сколько времени занимает каждый файл, поэтому я попробовал следующие методы:

Техника 1

Техника 2

Техника 3: обычный File.Copy («источник ....», «Место назначения»)

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

Может быть, я должен использовать эфирные методы 1 или 2, а затем в конце скопировать атрибуты из исходного файла и назначить их в целевой файл. Я не знаю, как это сделать, хотя.

Ответы [ 3 ]

1 голос
/ 22 мая 2011

Рассматривали ли вы просто написание сценария оболочки, который вызывает robocopy ? Каждый раз, когда мне приходилось запускать такие задачи резервного копирования, я просто пишу сценарий - robocopy уже делает тяжелую работу для меня, поэтому часто нет необходимости создавать заказное приложение.

1 голос
/ 22 мая 2011

FileInfo имеет элементы CreationTime и LastWriteTime, которые можно настраивать - так что вы можете согласиться с вашими предпочтительными методами и установить даты впоследствии, если это поможет.

0 голосов
/ 22 мая 2011

Решение, которое у меня есть, но оно длинное:

Я знаю, что могу скопировать файл из источника и затем назвать файл в месте назначения как-нибудь еще как «fileHasNotBeenCopiedYet» с атрибутами скрытого, затем, когда моя программа закончит копирование файла, измените имя на имя источника и скопируйте атрибуты и затем последнее, что я знаю, что если файл с таким именем ("fileHasNotBeenCopiedYet") существует, это означает, что файл поврежден.

...