我有一个看起来像这样的路径结构:
Main_Folder
***Sub_Folder1***
**1) FOLDER_Y**
Folder1
picture1.png
picture2.png
picturen.png
Folder2
picture1.png
picture2.png
picturen.png
FolderN
picture1.png
picture2.png
picturen.png
**2) FOLDER_X**
Folder1
picture1.png
picture2.png
picturen.png
Folder2
picture1.png
picture2.png
picturen.png
**3) FOLDER_Z**
Folder1
picture1.png
picture2.png
picturen.png
Folder2
picture1.png
picture2.png
picturen.png
***Sub_Folder2***
**1) FOLDER_Y**
Folder1
picture1.png
picture2.png
picturen.png
Folder2
picture1.png
picture2.png
picturen.png
FolderN
picture1.png
picture2.png
picturen.png
**2) FOLDER_X**
Folder1
picture1.png
picture2.png
picturen.png
Folder2
picture1.png
picture2.png
picturen.png
**3) FOLDER_Z**
Folder1
picture1.png
picture2.png
picturen.png
Folder2
picture1.png
picture2.png
picturen.png
***Sub_Folder3***
**1) FOLDER_Y**
Folder1
picture1.png
picture2.png
picturen.png
Folder2
picture1.png
picture2.png
picturen.png
FolderN
picture1.png
picture2.png
picturen.png
**2) FOLDER_X**
Folder1
picture1.png
picture2.png
picturen.png
Folder2
picture1.png
picture2.png
picturen.png
**3) FOLDER_Z**
Folder1
picture1.png
picture2.png
picturen.png
Folder2
picture1.png
picture2.png
picturen.png
> Desired mock output: > FOLDER_Y # files: 27 > FOLDER_X # files: 18 > FOLDER_Z # files: 18
我基本上希望用户输入主文件夹的路径,然后遍历每个子文件夹。然后从所有子文件夹中输出 ALL Folder_Y 中的文件总数。Folder_X、Folder_Z 也是如此。
我尝试了几种方法都不成功。
public void getFOLDER_Y(string strPath)
{
string partialName = "FOLDER_Y";
DirectoryInfo hdDirectoryInWhichToSearch = new DirectoryInfo(strPath);
FileInfo[] filesInDir = hdDirectoryInWhichToSearch.GetFiles("*" + partialName + "*.*");
DirectoryInfo[] dirsInDir = hdDirectoryInWhichToSearch.GetDirectories("*" + partialName + "*.*");
foreach (FileInfo foundFile in filesInDir)
{
string fullName = foundFile.FullName;
richtxt_results.Text += fullName + "\n";
}
foreach (DirectoryInfo foundDir in dirsInDir)
{
string fullName = foundDir.FullName;
richtxt_results.Text += fullName + "\n";
}
}
public static void CountFiles(string path)
{
int xFileCount = 0;
int yFileCount = 0;
int zFileCount = 0;
var files = Directory.EnumerateFiles(path, "*.*", SearchOption.AllDirectories);
foreach(string file in files)
{
string folder = new DirectoryInfo(Path.GetDirectoryName(file)).Name;
if (folder == "FOLDER_X")
xFileCount++;
if (folder == "FOLDER_Y")
yFileCount++;
if (folder == "FOLDER_Z")
zFileCount++;
}
Console.WriteLine("X Files : {0}", xFileCount);
Console.WriteLine("Y Files : {0}", yFileCount);
Console.WriteLine("Z Files : {0}", zFileCount);
}
小贴士:
所以我真的会使用这个函数,并用你想要的任何文件夹名称调用它:
public static int CountFiles(string path, string folderToSearch)
{
int fileCount = 0;
var files = Directory.EnumerateFiles(path, "*.*", SearchOption.AllDirectories);
foreach (string file in files)
{
string folder = new DirectoryInfo(Path.GetDirectoryName(file)).Name;
if (folder == folderToSearch)
fileCount++;
}
return fileCount;
}
然后像这样调用它:
static void Main(string[] args)
{
int xFiles = CountFiles("path goes here", "FOLDER_X");
int yFiles = CountFiles("path goes here", "FOLDER_Y");
int zFiles = CountFiles("path goes here", "FOLDER_Z");
}
编辑:对获取直接目录名称的方式进行了一些小改动。
EDIT2:编辑以纳入@MickyD 的建议。
EDIT3:这将通过您最近的要求。
public static int CountFiles2(string path, string folderToSearch)
{
int fileCount = 0;
var dirs = Directory.EnumerateDirectories(path, folderToSearch, SearchOption.AllDirectories).ToList();
foreach (string dir in dirs)
{
var files = Directory.EnumerateFiles(dir, "*.*", SearchOption.AllDirectories);
if (files != null)
fileCount += files.Count();
}
return fileCount;
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句