2013-12-09 2 views
0

В моем нижнем коде я пытаюсь переместить все мои файлы .doc, расположенные в одной папке, в другую. В производстве это будет перемещение файлов, сгенерированных в созданную папку C:\Temp\, в сетевую папку с заданием базы данных, которое каждые 5 минут перемещает файлы из сетевой папки в наш документ, представляя систему архивации.Directory.Move(): процесс не может получить доступ к файлу, потому что он используется другим процессом?

При попытке мой код, приведенный ниже тест, я получаю "The process cannot access the file because it is being used by another process."

КОД:

public void moveLocalToCommitFYI() 
     { 
      // MOVE DOCS FORM TEMP FOLDER TO COMMITFYI FOLDER 
      string dirSource = @"C:\Users\NAME\Desktop\CommitTest\MoveTest\"; 
      string dirDest = @"C:\Users\NAME\Desktop\CommitTest\MoveTest\DestTest\"; 

      try 
      { 
       Directory.Move(dirSource, dirDest); 
      } 
      catch (Exception ex) 
      { 
       MessageBox.Show("Source:\t" + ex.Source + "\nMessage: \t" + ex.Message + "\nData:\t" + ex.Data); 
      } 
     } 

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

public void moveLocalToCommitFYI() 
     { 
      // MOVE DOCS FORM TEMP FOLDER TO COMMITFYI FOLDER 
      string dirSource = @"C:\Users\NAME\Desktop\CommitTest\MoveTestFile.doc"; 
      string dirDest = @"C:\Users\NAME\Desktop\CommitTest\MoveTest\MoveTestFile.doc"; 

      try 
      { 
       Directory.Move(dirSource, dirDest); 
      } 
      catch (Exception ex) 
      { 
       MessageBox.Show("Source:\t" + ex.Source + "\nMessage: \t" + ex.Message + "\nData:\t" + ex.Data); 
      } 
     } 

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

EDIT:

Сделано изменение наличия моя папка назначения будет другая папка на рабочем столе, а не в подпапке. dirSource содержали 5 текстовые документы и каталог назначения (\ MoveTest \ на моем рабочем столе) не содержит никаких файлов:

string dirSource = @"C:\Users\NAME\Desktop\CommitTest\MoveTest\"; 
      string dirDest = @"C:\Users\NAME\Desktop\MoveTest\"; 

Это сгенерированные "Cannot create a file when that file already exists".

Исходя из этого, я предположил, что код на самом деле ПЕРЕЕЗД папку набор каталогов и все его содержимое из одного места в другое, поэтому я изменил свой код на следующее:

string dirSource = @"C:\Users\NAME\Desktop\CommitTest\MoveTest\"; 
      string dirDest = @"C:\Users\NAME\Desktop\MoveTest2\"; 

Это избавилась моя подпапка \ MoveTest \ in \ Desktop \ CommitTest \ и созданная папка \ Рабочий стол \ MoveTest2.

Есть ли способ перемещать содержимое папки, не избавляясь от исходной папки и помещая ее в уже созданную цель?

ответ

2

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

Вам придется перебирать все имена файлов и перемещать каждый файл по отдельности.

var files = Directory.EnumerateFiles(dirSource, "*.doc") 
        .Select(path => new FileInfo(path)); 
foreach (var file in files) 
    file.MoveTo(Path.Combine(dirDest, file.Name)); 

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

+0

Это сделало. Спасибо Тиму! –

0

Вы не можете переместить папку ниже . Вам нужно найти все его содержимое и переместить их. Или сделайте это: переименуйте MoveTest в MoveTest2, создайте новый каталог MoveTest, и теперь вы можете переместить MoveTest под него.

+0

Я отредактировал свое сообщение. Есть ли способ переместить содержимое исходной папки, не удаляя ее, а затем поместить это содержимое в уже созданную папку назначения? –

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

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