【问题标题】:How to create folder inside every directory and subdirectories that contains a jpg file?如何在包含 jpg 文件的每个目录和子目录中创建文件夹?
【发布时间】:2019-05-16 21:50:23
【问题描述】:

我需要能够在主路径的每个目录和子目录中创建一个文件夹,

但我不知道如何获取包含文件的每个路径,因此我可以在那里创建一个文件夹...实际上我正在获取所有目录:

    using System;
    using System.IO;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using ImageMagick;
    using System.Collections;

    namespace ImgOptimization
    {
        class Program
        {
            static void Main(string[] args)
            {


                string path = "mypath";



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

                    string[] subdirectorios = System.IO.Directory.GetFiles(path, "*.jpg", SearchOption.AllDirectories);

                    string carpetas = null;



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

                        carpetas = subdirectorios[i];


                            string newpathMobile = "newpath"


                            if (!System.IO.Directory.Exists(newpath))
                            {
                                System.IO.Directory.CreateDirectory(newpath);
                            }

                    }
                }
}
}

但我不知道如何在循环期间在每个路径中创建一个文件夹,知道如何实现吗?

【问题讨论】:

    标签: c# for-loop directory


    【解决方案1】:

    你可以递归遍历所有子目录,像这样

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.IO;
    
    namespace TestSubDirectories
    {
        class Program
        {
    
            static string NewFolderName = "NewFolder";
            static void Main(string[] args)
            {
    
                string path = "C:\\testfolder";
    
                if (Directory.Exists(path))
                    CreateSubFolderIn(path);
            }
    
    
            static void CreateSubFolderIn(string path)
            {
                foreach (string SubDirectory in Directory.GetDirectories(path))
                {
                    CreateSubFolderIn(SubDirectory);
                }
    
                if(!Directory.Exists(path + "\\" + NewFolderName))
                    Directory.CreateDirectory(path + "\\" + NewFolderName);
    
            }
    
        }
    }
    

    【讨论】:

      【解决方案2】:

      一个相当简单的方法是使用DirectoryInfo 类,它返回强类型的DirectoryInfo 对象(而不仅仅是一个表示目录路径的字符串)。

      我们可以过滤那些目录包含具有我们指定扩展名的文件的结果,然后我们可以向该目录添加一个子目录:

      public static void CreateDirectoryNextToFileType(string rootPath, string fileExtension, 
          string newDirectoryName)
      {
          if (rootPath == null || !Directory.Exists(rootPath))
              throw new ArgumentException("rootPath must be the path to an existing directory");
      
          if (fileExtension == null) throw new ArgumentNullException(nameof(fileExtension));
      
          if (string.IsNullOrEmpty(subDirectoryName) ||
              subDirectoryName.Any(chr => Path.GetInvalidPathChars().Contains(chr)))
              throw new ArgumentException("subDirectoryName is null, empty, or " + 
                  "contains invalid characters");
      
          // Enumerate all directories and return those that 
          // contain a file with the specified extension
          var directoriesContainingFile = new DirectoryInfo(rootPath)
              .EnumerateDirectories("*", SearchOption.AllDirectories)
              .Where(dir => dir.EnumerateFiles().Any(file =>
                  file.Extension.Equals(fileExtension, StringComparison.OrdinalIgnoreCase)));
      
          // For each of the directories, create a sub directory with the specified name
          foreach (var directory in directoriesContainingFile)
          {
              directory.CreateSubdirectory(newDirectoryName);
          }
      }
      

      因此,如果我们想在根"f:\private\temp" 下任何包含".cmd" 文件的任何目录中创建一个名为"NewDirNextToCmdFile" 的子目录,我们将调用此方法:

      CreateDirectoryNextToFileType(@"f:\private\temp", ".cmd", "NewDirNextToCmdFile");
      

      【讨论】:

        猜你喜欢
        • 2020-06-17
        • 2017-11-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-12-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多