以递归方式获取文件数
本文关键字:文件 获取 方式 递归 | 更新日期: 2023-09-27 17:56:00
我正在尝试计算计算机中*.tmp文件的数量。当我单击一个按钮时,标签框应该开始增加每次搜索文件的计数.tmp数。我的以下编码似乎不起作用。
任何帮助都非常感谢。另外,当我单击按钮以获取tmp文件的数量时;标签框应该开始显示计数的增加,如 1,2,,,,,56,,89,,,等,而不仅仅是显示文件总数。
namespace finalclean {
public partial class FinalClean : Form {
public FinalClean() {
InitializeComponent();
}
int count = 0;
private void button1_Click(object sender, EventArgs e) {
String path = Environment.ExpandEnvironmentVariables(@"c:'windows");
try {
foreach (string dirPath in Directory.GetDirectories(path)) {
foreach (string filePath in Directory.GetFiles(dirPath)) {
string filename = Path.GetFileName(filePath);
if (filename.Equals("*.tmp")) {
count++;
}
}
}
}
catch (System.Exception excpt) {
//Console.WriteLine(excpt.Message);
}
textBox1.Text = (count.ToString());
}
}
}
你可以只使用:
var count = Directory.EnumerateFiles(@"C:'Windows'", "*.tmp",
SearchOption.AllDirectories).Count();
你的代码不起作用,因为你没有访问所有的目录,而只是访问第一个目录(C:''Windows)。
如果你让它递归,它可以为你做这个技巧。
internal class Program
{
private static void Main(string[] args)
{
var myClass = new Visitor();
myClass.OnNewFileFound +=Progress;
myClass.CountTmpFiles();
Console.Read();
}
private static void Progress(int i)
{
Console.WriteLine(i); //update textbox here
}
}
public class Visitor
{
public event Action<int> OnNewFileFound;
private int count = 0;
public int CountTmpFiles()
{
var path = Environment.ExpandEnvironmentVariables(@"c:'windows");
VisitDir(path);
return count;
}
private void VisitDir(string path)
{
try
{
foreach (var directory in Directory.GetDirectories(path))
{
VisitDir(directory); //recursive call here
}
foreach (var filePath in Directory.GetFiles(path, "*.tmp", SearchOption.TopDirectoryOnly))
{
count++;
if (OnNewFileFound != null)
{
OnNewFileFound(count);
}
}
}
catch (System.Exception excpt)
{
//Console.WriteLine(excpt.Message);
}
}
}
是的,如果您只计算文件,那么编写自己的代码就没有意义了。你只需按照安德鲁和哈姆雷特·哈科比安的建议使用Directory.EnumerateFiles
。