2011-01-10 2 views
0

Что нужно позаботиться при создании метода перемещения (вырезания) партии файла из одной директории в другую?Безопасный способ программно перемещать пакет файлов?

Предположим, что подпись метода Move(filter, sourceFolder, destinationFolder, overwrite). Что мне нужно, чтобы избежать риска потери данных, особенно при перезаписывании исходного файла и удалении исходного файла?

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

Я использую пространство имен System.IO System.IO для операций перемещения.

+0

Можете ли вы использовать транзакции? – Gabe

+0

что такое транзакции? –

+0

Описание транзакционной NTFS: http://msdn.microsoft.com/en-us/magazine/cc163388.aspx – Gabe

ответ

0

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

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

+0

IMO, недостатком такого подхода является то, что копия медленнее, чем перемещение (обычно мгновенно). –

+0

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

Смежные вопросы