2016-07-20 2 views
0

У меня есть функция, которая suposed, чтобы скопировать все папки, вложенные папки файлы, выбранные из OpenFileDialog из места в другое:Как скопировать выбранные папки, вложенные папки и файлы из OpenFileDialog в C#

я сделал эту функцию для скопировать все выбранные пути:

public void CopiarFicheiros(string CopyTo, List<string> FilesToCopy) 
     { 

      foreach (var item in FilesToCopy) 
      { 
       string DirectoryName = Path.GetDirectoryName(item); 
       string Copy = Path.Combine(CopyTo, DirectoryName); 
       if (Directory.Exists(Copy) && DirectoryName.ToLower() != "newclient" && DirectoryName.ToLower() != "newservice") 
       { 
        Directory.CreateDirectory(Copy); 
        File.Copy(item, Copy + @"\" + Path.GetFileName(item), true); 
       } 
       else File.Copy(item, CopyTo + @"\" + Path.GetFileName(item), true); 
      } 

     } 

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

Это, как я получаю выбранные файлы и папки из диалога:

private List<string> GetFiles() 
     { 
      var Files = new List<string>(); 
      if (openFileDialog.ShowDialog() == System.Windows.Forms.DialogResult.OK) 
      { 
       string sFileName = openFileDialog.FileName; 
       string[] arrAllFiles = openFileDialog.FileNames; 
       Files = arrAllFiles.ToList(); 
      } 
      return Files; 
     } 

Кто-нибудь есть лучшее решение, или ключ к тому, что мне нужно изменить, чтобы успешно сделать это? Любая помощь очень ценится, спасибо

ответ

0

Не используйте OpenFileDialog, чтобы выбрать папку. Как следует из названия, это не сделано для этой задачи. Для этой задачи требуется FolderBrowserDialog class.

How to: Copy Directories:

// Copy from the current directory, include subdirectories. 
DirectoryCopy(".", @".\temp", true); 

private static void DirectoryCopy(string sourceDirName, string destDirName, bool copySubDirs) 
{ 
    // Get the subdirectories for the specified directory. 
    DirectoryInfo dir = new DirectoryInfo(sourceDirName); 

    if (!dir.Exists) 
    { 
     throw new DirectoryNotFoundException(
      "Source directory does not exist or could not be found: " 
      + sourceDirName); 
    } 

    DirectoryInfo[] dirs = dir.GetDirectories(); 
    // If the destination directory doesn't exist, create it. 
    if (!Directory.Exists(destDirName)) 
    { 
     Directory.CreateDirectory(destDirName); 
    } 

    // Get the files in the directory and copy them to the new location. 
    FileInfo[] files = dir.GetFiles(); 
    foreach (FileInfo file in files) 
    { 
     string temppath = Path.Combine(destDirName, file.Name); 
     file.CopyTo(temppath, false); 
    } 

    // If copying subdirectories, copy them and their contents to new location. 
    if (copySubDirs) 
    { 
     foreach (DirectoryInfo subdir in dirs) 
     { 
      string temppath = Path.Combine(destDirName, subdir.Name); 
      DirectoryCopy(subdir.FullName, temppath, copySubDirs); 
     } 
    } 
} 
Смежные вопросы