Переход по каталогам и подкаталогам - PullRequest
0 голосов
/ 25 апреля 2019

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

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

должно переименоваться в

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

Я вижукод проходит через все, но изображение не переименовывается, и я не вижу, где я ошибся

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 { }
            }

1 Ответ

1 голос
/ 25 апреля 2019

Когда запрашивает , вы можете попробовать использовать 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();

Тогда мы можем переместить (не копировать ) файлы:

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