2015-11-30 3 views
0

Я создаю приложение формы Windows. Я использую folderbrowser, textbox1, button.I создаю папку и подпапку внутри Folder.From textbox1 выбирает определенную папку. Внутри my if условие, я выбираю определенную папку, выбранную в текстовом поле1, и копирую файлы из целевой папки. Я копирую файлы и сохраняю их во вновь созданной папке в качестве папки назначения (которая является подпапкой внутри папки). Он создает Folder, Sub-Folder, но не копирует файлы из целевой в папку назначения. Я не понимаю, что не так в моем коде.Файлы не копируются из источника в пункт назначения в C#

private void button2_Click(object sender, EventArgs e) 
    { 
      FolderBrowserDialog folderBrowserDlg = new FolderBrowserDialog(); 
      folderBrowserDlg.ShowNewFolderButton = true; 
      DialogResult dlgResult = folderBrowserDlg.ShowDialog(); 
      if (dlgResult.Equals(DialogResult.OK)) 
      { 
       textBox1.Text = folderBrowserDlg.SelectedPath; 
       Environment.SpecialFolder rootFolder = folderBrowserDlg.RootFolder; 
      } 
    } 


private void button3_Click(object sender, EventArgs e) 
     { 

      d(); 


     } 
public void d() 
     { 
      string s = textBox1.Text; 
      string [email protected]"c:\Users\T\Documents\Visual Studio 2015\Projects\PlatG\PlGames\DATA\AMT8-P47\data\AMT8-P47"; 
      string [email protected]"c:\Users\T\Documents\Visual Studio 2015\Projects\PlatG\PlGames\DATA\GDIV8-P89\data\GDIV8-P89"; 

      string subFolderZ [email protected]"C:\DATA"; 
      if (!Directory.Exists(subFolderZ)) 
      { 
       Directory.CreateDirectory(subFolderZ); 
      } 
      if(s==z) 
      { 
       string subFolderZ1 = Path.Combine(subFolderZ, "AMT8-P47"); 
       if (!Directory.Exists(subFolderZ1)) 
       { 
        Directory.CreateDirectory(subFolderZ1); 
        string[] dirs1d = Directory.GetDirectories(s, "*.*", SearchOption.AllDirectories); 
        foreach (var dir in dirs1d) 
        { 
         string destinationPath = @"C:\DATA\AMT8-P47"; 

         string[] fileList = System.IO.Directory.GetFiles(dir, "*.*"); 
         foreach (string file in fileList) 
         { 
          File.Copy(file, file.Replace(dir, destinationPath), true); 
         } 
        } 

       } 
       } 
      if(s==k) 
       { 
       string subFolderZ2 = Path.Combine(subFolderZ, "GDIV8-P89"); 
       if (!Directory.Exists(subFolderZ2)) 
       { 
        Directory.CreateDirectory(subFolderZ2); 
        // string p = textBox1.Text; 
        string[] dirs1dd = Directory.GetDirectories(s, "*.*",SearchOption.AllDirectories); 
        foreach (var dir in dirs1dd) 
        { 
         string destinationPath = @"C:\DATA\GDIV8-P89"; 

         string[] fileList = System.IO.Directory.GetFiles(dir, "*.*"); 
         foreach (string file in fileList) 
         { 
          File.Copy(file, file.Replace(dir, destinationPath), true); 
         } 
        } 
       } 

       } 
     else 
      { 
      } 
    } 
+0

У вас есть \\ (двойная обратная косая черта) в 'k' сразу после' PlatG' – MickyD

+0

Есть ли вложенные папки (C: \ DATA \ AMT8-P47 и C: \ DATA \ GDIV8-P89) уже существуют? – benPearce

+1

subFolderZ отсутствует двоеточие (:) – benPearce

ответ

0

Как мы выяснили во время комментариев, ваша проблема заключается в том, что вы не получаете список папок.

Чтобы исправить это коммандос должен быть изменен:

string[] dirs1d = Directory.GetDirectories(s, "*.*", SearchOption.AllDirectories); 

к:

string[] dirs1d = Directory.GetDirectories(s, "*", SearchOption.AllDirectories); 

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

Чтобы поставить все это вместе:

string[] dirs1d = Directory.GetDirectories(s, "*", SearchOption.AllDirectories); 
Array.Resize(ref dirs1d , dirs1d.Length + 1); 
dirs1d[dirs1d.Length - 1] = s; 
foreach.... 

Одна вещь запиской для получения файлов:

string[] fileList = System.IO.Directory.GetFiles(dir, "*.*"); 

это хорошо, но в случае, если у вас есть файлы wihtout расширения я не 100% что он работает. Таким образом, я бы тоже изменил это на просто * как на папки. Просто чтобы быть на стороне спасения.

+0

Я реализовал вашу логику, и ваш код копирует файл, но он копирует файлы из одного каталога в оба каталога. Скажем, я выбираю путь 1-го каталога, он копирует файлы из этого каталога и помещает его на 1-й и 2-й directory.We возможно это c opy только 1-й каталог и поместить его в 1-й каталог only.debugging показывает мне, что он выбирает обе папки. – delta12

+0

Что вы имеете в виду с 1-м и 2-м каталогами? – Thomas

+0

1-й каталог \ DATA \ AMT8-P47 и второй каталог DATA \ GDIV8-P89 – delta12

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