我试图计算计算机中* .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());
}
}
}
答案 0 :(得分:1)
你可以使用:
var count = Directory.EnumerateFiles(@"C:\Windows\", "*.tmp",
SearchOption.AllDirectories).Count();
答案 1 :(得分:0)
您的代码无效,因为您没有访问所有目录,只有第一个目录(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
作为Andrew和Hamlet Hakobyan建议的。