Индикатор выполнения для копирования файлов с использованием массива C # - PullRequest
1 голос
/ 16 февраля 2012

У меня есть оператор if, который проверяет, существует ли каталог и копирует ли он эту папку в указанное место.

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

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

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

Любая помощь или советы о том, как заставить работать индикатор, была бы очень благодарна:)

for (int i = 0; i < pathArray.Length; i++)
{

   string sourcePath = pathArray[i];

   //MISSING CODE

   if (System.IO.Directory.Exists(sourcePath))
   {                   

      System.IO.Directory.CreateDirectory(targetPathProper);

      foreach (string dirPath in System.IO.Directory.GetDirectories(sourcePath,"*",
          (System.IO.SearchOption.AllDirectories)))
      {
         System.IO.Directory.CreateDirectory(dirPath.Replace(sourcePath, 
                targetPathProper));
      }

      foreach (string newPath in System.IO.Directory.GetFiles(sourcePath, "*", 
          (System.IO.SearchOption.AllDirectories)))
      {
         System.IO.File.Copy(newPath, newPath.Replace(sourcePath, 
             targetPathProper), true);
      }

   } //end if
} // end for

Ответы [ 4 ]

2 голосов
/ 17 февраля 2012

Вы говорите, что получаете ошибку, какую ошибку вы получаете?

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

progressBar1.Maximum = pathArray.Length;
progressBar1.Value = 0;
for (int i = 0; i < pathArray.Length; i++)
{

   string sourcePath = pathArray[i];

   progressBar1.Value++;

   if (System.IO.Directory.Exists(sourcePath))
   {                   

      System.IO.Directory.CreateDirectory(targetPathProper);
      string[] subDirs = System.IO.Directory.GetDirectories(sourcePath,"*",(System.IO.SearchOption.AllDirectories))
      progressBar2.Maximum = subDirs.Length;
      progressBar2.Value = 0;
      foreach (string dirPath in subDirs)
      {
         progressBar2.Value++;
         System.IO.Directory.CreateDirectory(dirPath.Replace(sourcePath, 
            targetPathProper));
         Application.DoEvents();
      }

      progressBar2.Value = 0;
      foreach (string newPath in subDirs)
      {
         progressBar2.Value++;
         System.IO.File.Copy(newPath, newPath.Replace(sourcePath, 
             targetPathProper), true);
         Application.DoEvents();
      }

   } //end if
} // end for
2 голосов
/ 24 января 2014
string[] subDirs = 
            System.IO.Directory.GetDirectories(SourcePath, "*",
            (System.IO.SearchOption.AllDirectories));
                int subFiles = System.IO.Directory.GetFiles(SourcePath, "*.*",
         SearchOption.AllDirectories).Length;
 progressBar1.Maximum = subFiles+(subDirs.Length);
 progressBar1.Value = 0;
 foreach (string dirPath in Directory.GetDirectories(SourcePath, "*",
       SearchOption.AllDirectories))
 {
       progressBar1.Value++;
       progressBar1.PerformStep();
       Directory.CreateDirectory(dirPath.Replace(SourcePath, DestinationPath));
       Application.DoEvents();   

 }

 foreach (string newPath in Directory.GetFiles(SourcePath, "*.*",
                 SearchOption.AllDirectories))
 {
       progressBar1.Value++;
       File.Copy(newPath, newPath.Replace(SourcePath, DestinationPath), true);
       Application.DoEvents();

 }
1 голос
/ 16 февраля 2012

Вы можете использовать Backgroundworker, но если вы хотите использовать дополнительный метод, вот ссылка с загружаемым исходным кодом, который также поможет вам начать, так как я предполагаю, что это приложение winforms

Как скопировать файлы в C # с помощью настраиваемого индикатора прогресса и / или индикатора выполнения

0 голосов
/ 24 января 2014

попробовать { string [] subDirs = System.IO.Directory.GetDirectories (SourcePath, "", (System.IO.SearchOption.AllDirectories)); int subFiles = System.IO.Directory.GetFiles (SourcePath, ". *", SearchOption.AllDirectories) .Length; progressBar1.Maximum = subFiles + (subDirs.Length); progressBar1.Value = 0; foreach (строка dirPath в Directory.GetDirectories (SourcePath, "*", SearchOption.AllDirectories)) { progressBar1.Value ++; Directory.CreateDirectory (dirPath.Replace (SourcePath, DestinationPath)); Application.DoEvents ();
}

            foreach (string newPath in Directory.GetFiles(SourcePath, "*.*",
                 SearchOption.AllDirectories))
            {
                progressBar1.Value++;
                File.Copy(newPath, newPath.Replace(SourcePath, DestinationPath), true);
                Application.DoEvents();

            }

        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...