0

Project- *という名前の複数のフォルダーを含む親フォルダーがあります(フォルダーにはProject-1、Project-15、Project-253などの番号が付けられています)。これらの各フォルダの中には、常に同じ名前の「project.zip」というzipファイルがあります。つまり、フォルダ構造が正しい場合は、常にTopFolder \ Project-*\project.zipである必要があります。

各Project-*フォルダーを調べて、project.zipファイルが別のフォルダー内にネストされているかどうかを確認するプログラムを作成しようとしています(例:Project-* \ newfolder \ project.zip)

Project- *というフォルダーを検索し、サブディレクトリがある場合はそれらを一覧表示するコードがありますが、project.zipファイルをフォルダーと見なしているため、すべてがサブディレクトリを持っていると表示されます。

 DirectoryInfo directory = new DirectoryInfo(txtbxOldFolder.Text);
            DirectoryInfo[] folders = directory.GetDirectories("*Project-*", SearchOption.AllDirectories);


            //finds folders nested in the folder
            var query = from folder in folders
                        where folder.GetFileSystemInfos().Length > 0 
                        select folder.FullName.ToString();
            foreach (string str in query)
            {
                //this adds the path of any Project-* folder with subdirectories
                listNestedFolder.Add(str);
            }

上記のように、上記のコードはサブディレクトリを持つProject- *フォルダーを検出しますが、Project-*\project.zipも検出します。zipファイルをディレクトリとして識別しないようにするにはどうすればよいですか?

4

2 に答える 2

3

GetFileSystemInfos()ファイルとフォルダの両方を返します。
おそらく電話したいと思うでしょうGetDirectories()

パフォーマンスを向上させるために、次のように書くことができますwhere folder.EnumerateDirectories().Any()

于 2012-08-13T17:14:33.077 に答える
0

このロジックを試して、ネストされたファイルまたはサブディレクトリ構造の他の違いを検索できます。

        string topfolder = @"c:\temp\utils\";
        string filename = "project.zip";

        foreach (string dir in Directory.GetDirectories(topfolder, "Project-*", SearchOption.TopDirectoryOnly))
        {
            IEnumerable<string> files = Directory.GetFiles(dir, "*.*", SearchOption.TopDirectoryOnly).Select(f => Path.GetFileName(f));
            if (files.Count() > 1)
            #region if directory contains extra (unexpected) files
            {
                Console.WriteLine(string.Format("Directory {0} contains {1} files", dir, files.Count()));
            }
            #endregion if directory contains extra (unexpected) files

            if (!files.Contains(filename))
            {
                Console.WriteLine(string.Format("File is not found in {0}", dir));

                #region Searching for the file in depth

                files = Directory.GetFiles(dir, filename, SearchOption.AllDirectories);
                if (files.Count() > 0)
                {
                    Console.WriteLine("The file has been found too deep:");
                    foreach (string s in files)
                        Console.WriteLine(s);
                }

                #endregion Searching for the file in depth
            }

            #region Searching for extra (unexpected) subdirectories

            int dircount = Directory.GetDirectories(dir, "*.*", SearchOption.TopDirectoryOnly).Length;
            if (dircount > 0)
                Console.WriteLine(string.Format("Directory {0} contains {1} subdirectories", dir, dircount));

            #endregion Searching for extra (unexpected) subdirectories
        }

        Console.ReadLine();
于 2012-08-14T06:15:36.750 に答える