【问题标题】:C#: Copy multiply files in folder and keep the folder-structureC#:复制文件夹中的多个文件并保留文件夹结构
【发布时间】:2019-01-23 05:46:29
【问题描述】:

我想将“Main-Folder”和子文件夹中存在的所有 .txt 文件复制到“Main-Folder-Copy”。

Main-Folder
├── Folder 1
│   ├── file0.jpg
│   ├── file1.ini
│   ├── file2.dll
│   └── file3.txt
└── Folder 2
    ├── file4.dll
    ├── file5.txt
    └── Folder 3
        ├── file6.txt
        ├── file7.jpg
        ├── file8.dll
        └── file9.txt

复制到其他地方时,我想保持这样的文件夹结构:

Main-Folder-Copy
├── Folder 1
│   └── file3.txt
└── Folder 2
    ├── file5.txt
    └── Folder 3
        ├── file6.txt
        └── file9.txt

我的想法是将整个“主文件夹”复制到一个临时文件夹并删除所有不必要的文件。当面对更大的文件夹时,这可能会成为一个问题,因为必须首先复制整个文件夹。有没有更好的解决方案?

我尝试使用System.IO.Directory.EnumerateFiles

【问题讨论】:

    标签: c# file copy directory


    【解决方案1】:

    这对我有用,与以前的 MSDN 答案非常相似:

    public static void Copy(string sourceDirectoryName, string targetDirectoryName)
    {
        Directory.CreateDirectory(targetDirectoryName);
    
        DirectoryInfo source = new DirectoryInfo(sourceDirectoryName);
        DirectoryInfo target = new DirectoryInfo(targetDirectoryName);
    
        CopyWork(source, target);
    }
    
    private static void CopyWork(DirectoryInfo source, DirectoryInfo target)
    {
        foreach (DirectoryInfo dir in source.GetDirectories())
            CopyWork(dir, target.CreateSubdirectory(dir.Name));
    
        foreach (FileInfo file in source.GetFiles())
            file.CopyTo(Path.Combine(target.FullName, file.Name));
    }
    

    出于某种原因,他们从未输入过System.IO.Directory.Copy()

    【讨论】:

      【解决方案2】:

      下面的这个例子可能会对你有所帮助:

      string dirA = @"Main-Folder\";
      string dirB = @"Main-Folder-Copy\";
      
      string[] files = System.IO.Directory.GetFiles(dirA);
      
      foreach (string s in files) {
          if (System.IO.Path.GetExtension(s).equals(".txt")) {
              System.IO.File.Copy(s, System.IO.Path.Combine(targetPath, fileName), true);
          }
      }
      

      【讨论】:

        【解决方案3】:

        下面的代码取自MSDN,它应该很容易实现到任何程序中并且非常容易解释。如果你知道什么是不必要的文件,你可以在复制时过滤它们

        using System;
        using System.IO;
        
        class DirectoryCopyExample
        {
            static void Main()
            {
                // 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);
                    }
                }
            }
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2013-06-18
          • 1970-01-01
          • 1970-01-01
          • 2014-03-03
          • 1970-01-01
          • 1970-01-01
          • 2010-12-11
          相关资源
          最近更新 更多