我之前问过快速获取特定路径中的所有文件和目录的问题,以便尽可能快地找到文件.我正在使用该解决方案,以便找到与正则表达式匹配的文件名.
我希望显示一个进度条,因为有一些非常大而慢的硬盘驱动器,它仍然需要大约1分钟才能执行.我在另一个链接上发布的解决方案无法让我知道为了让我显示进度条,还有多少文件丢失.
我正在考虑做的一个解决方案是尝试获取我正在计划遍历的目录的大小.例如,当我右键单击该文件夹时,C:\Users我可以估计该目录的大小.如果我能够知道大小,那么我将能够通过添加我找到的每个文件的大小来显示进度.换句话说,progress =(文件大小的当前总和)/目录大小
由于某种原因,我无法有效地获得该目录的大小.
有关堆栈溢出的一些问题使用以下方法:

但请注意,我得到一个例外,无法枚举文件.我很高兴在我的驱动器上尝试这种方法.
在那张照片上,我试图计算文件数量以显示进度.我可能无法使用该方法有效地获取文件数量.当人们问起how to get the number of files on a directory并且人们问起时,我只是尝试堆栈溢出的一些答案how the get the size f a directory.
在.NET 4中,这个带有递归的Directory.EnumerateFiles()方法看起来很方便.
但是,如果在递归中发生异常,我如何继续/从中恢复并继续枚举其余文件?
try
{
var files = from file in Directory.EnumerateFiles("c:\\",
"*.*", SearchOption.AllDirectories)
select new
{
File = file
};
Console.WriteLine(files.Count().ToString());
}
catch (UnauthorizedAccessException uEx)
{
Console.WriteLine(uEx.Message);
}
catch (PathTooLongException ptlEx)
{
Console.WriteLine(ptlEx.Message);
}
Run Code Online (Sandbox Code Playgroud) 我需要一些帮助.现在我已经完成了一个文件搜索,它将搜索我的整个硬盘驱动器并且可以正常工作.以下是执行此操作的两种方法.
public void SearchFileRecursiveNonMultithreaded()
{
//Search files multiple drive
string[] drives = Environment.GetLogicalDrives();
foreach (string drive in drives)
{
if (GetDriveType(drive).ToString().CompareTo("DRIVE_FIXED") == 0)
{
DriveInfo driveInfo = new DriveInfo(drive);
if (driveInfo.IsReady)
{
System.IO.DirectoryInfo rootDirectory = driveInfo.RootDirectory;
RecursiveFileSearch(rootDirectory);
}
}
}
MessageBox.Show(files.Count.ToString());
}
public void RecursiveFileSearch(DirectoryInfo root)
{
DirectoryInfo[] subDirectory;
try
{
//private List<FileInfo> files = new List<FileInfo>() is declared above
files.AddRange(root.GetFiles(searchString.Text, SearchOption.TopDirectoryOnly));
}
catch (Exception)
{
}
try
{
// Now find all the subdirectories under this directory.
subDirectory = …Run Code Online (Sandbox Code Playgroud) 我想知道某个文件夹是否包含以特定名称开头的子文件夹.
对于Eg.
在我的C:\ Test文件夹中,我有GUI,TCP,PLC,PLC_1,PLC_2 ...... PLC_n等文件夹.
我可能有也可能没有PLC_文件夹.我想检查这些文件夹是否存在.如果它们存在,我想提取所有这些文件夹的名称.