简体   繁体   English

遍历目录和子目录

[英]Stepping through directories and sub-directories

I have code that steps through a main directory and all the sub directories.我有遍历主目录和所有子目录的代码。 The images in each sub directories needs to be renamed as per the folder it is ins name.每个子目录中的图像需要根据其名称所在的文件夹命名。

C:\Users\alle\Desktop\BillingCopy\uploaded 27-02\\Batch002-190227010418829\PPA14431564096\File1.png

should rename to应该重命名为

C:\Users\alle\Desktop\BillingCopy\uploaded 27-02\Batch002-190227010418829\PPA14431564096\PPA14431564096.png

I can see the code is stepping through every thing but the image isn't beeing renamed and I can't see where I went wrong我可以看到代码正在遍历所有内容,但图像没有重命名,我看不出哪里出错了

while(isTrue)
            {
                try
                {
                    //write your code here
                    string filename1 = "1.tif";
                    string newFileName = "allen.tif";

                    string[] rootFolder = Directory.GetDirectories(@"C:\Users\alle\Desktop\BillingCopy");

                    foreach(string dir in rootFolder)
                    {
                        string[] subDir1 = Directory.GetDirectories(dir);

                        foreach(string subDir in subDir1)
                        {
                            string[] batchDirList = Directory.GetDirectories(subDir);

                            foreach(string batchDir in batchDirList)
                            {
                                string[] waybillNumberDir = Directory.GetDirectories(batchDir);

                                foreach(string hawbDir in waybillNumberDir)
                                {
                                    string waybillNumber = Path.GetDirectoryName(hawbDir);

                                    string[] getFileimages = Directory.GetFiles(hawbDir);

                                    foreach(string imgInDir in getFileimages)
                                    {
                                        File.Copy(imgInDir, Path.Combine(@"C:\Users\alle\Desktop\Copy", string.Format("{0}.{1}", waybillNumber, Path.GetExtension(imgInDir))));
                                    }
                                }
                            }
                        }
                    }

                    File.Copy(Path.Combine("source file", filename1), Path.Combine("dest path", 
                        string.Format("{0}{1}", Path.GetFileNameWithoutExtension(newFileName), Path.GetExtension(newFileName))), true);
                }
                catch { }
            }

When querying you can try using Linq to obtain the required data:查询时可以尝试使用Linq获取需要的数据:

   // All *.png files in all subdirectories
   string rootDir = @"C:\Users\alle\Desktop\BillingCopy";

   var agenda = Directory
    .EnumerateFiles(rootDir, "*.png", SearchOption.AllDirectories)
    .Select(file => new {
      oldName = file,
      newName = Path.Combine(
        Path.GetDirectoryName(file), 
        new DirectoryInfo(Path.GetDirectoryName(file)).Name + Path.GetExtension(file))
    })
    .ToArray();

Then we can move (not copy ) the files:然后我们可以移动(而不是复制)文件:

  foreach (var item in agenda)
    File.Move(item.oldName, item.newName);

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM