2012-01-11 2 views
0

Кто-нибудь знает, как реализовать функцию отката при копировании файлов при вызове исключения.C# File Copy Rollback

Вот некоторые условия, при копировании файлов:

  1. Скопируйте файл в папку общего
  2. файла не больше, чем 3MB
  3. Файл представляет собой файл изображения (JPG, JPEG, BMP , GIF, PNG)
  4. Предотвращение имени файла дубликата уже реализована
  5. ОС в Windows XP и выше
  6. код на C# .Net 4.0 в V isual Studio 2010 Professional
  7. Сетевое подключение к локальной сети
  8. Несколько файлов для копирования, отката, когда исключение

Пожалуйста, помогите. Спасибо заранее.

+0

Не могли бы вы просто попытаться удалить файл, чтобы выполнить откат. Вы можете ловить ошибки, используя инструкцию try catch. – Dessus

+0

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

ответ

2

Да. Вернитесь назад и удалите все файлы.

В зависимости от вашей структуры существует множество вещей, которые вы можете сделать. Если у вас есть List<string>, например, перебирать используя int:

for(int i = 0; i < filesToCopy.Count; i++) { 
    try { 
     // Copy the file 
    } catch(Exception ex) { 
     // Rollback 
     while(--i >= 0) { 
      System.IO.File.Delete(filesToCopy[i]); // For example 
     } 

     break; 
    } 
} 
+1

Что делать, если операция копирования переписывала существующие файлы в пункт назначения? Старые версии файлов исчезнут после откат. – ean5533

+0

@ ean5533: Хммм ... хороший пункт. Немного неудобно откатывать это назад, не вводя другие ошибки. – Ryan

+1

@ ean5533 Состояние чтения №4. Нет существующего файла для перезаписывания. –

0

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

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

+0

Система не будет работать, если есть сетевая проблема. Я попробую ваше предложение. Спасибо за ответ. –

+0

@JohnIsaiahCarmona: Таким образом, система может предсказать, что сеть в будущем опустится и откажется начать? ;-) – Jon