【问题标题】:Directory length not working目录长度不起作用
【发布时间】:2015-08-20 14:41:06
【问题描述】:

这可能是一个愚蠢的问题,但我试图找出一个文件夹中有多少个文件,一分钟它告诉我 0,下一次它告诉我 1 当那里根本没有文件时。

我什至在我的文档中创建了一个名为 H 的新文件夹,其中根本没有任何内容,并且它仍然返回 1 项。有人请解释一下,甚至自己尝试一下,这让我很头疼

int i = Directory.GetFiles(@"C:\Users\William\Documents\H\").Length;
        MessageBox.Show(Convert.ToString(i));

【问题讨论】:

  • 尝试让它显示它找到的文件。也许这会有所帮助?
  • 您是否尝试过输出 GetFiles 在某处实际返回的内容?很难看出它是如何突然改变的
  • 我该怎么做?我不擅长编程
  • 好吧,GetFiles(...) 已经返回找到的文件数组。只需遍历该数组并输出它找到的内容。
  • 顺便说一句,你确定它不是像thumbs.db这样的自动生成(可能是隐藏的)系统文件吗?

标签: c# file directory


【解决方案1】:

所以实际上你会得到不需要的系统文件,比如thumbs.db。您可以通过这种方式排除它们:

string[] files = new DirectoryInfo(@"C:\Users\William\Documents\H\").GetFiles()
            .Where(f => !f.Attributes.HasFlag(FileAttributes.System | FileAttributes.Hidden))
            .Select(f => f.FullName)
            .ToArray();

【讨论】:

  • 打败我!我也打算把... !f.Attributes.HasFlag(FileAttributes.System | FileAttributes.Hidden)) 排除隐藏文件。
  • 我会小心(对可能使用此方法的其他人)。显然这将取决于您的情况,但如果您可能想要隐藏文件,只需排除该部分即可。
【解决方案2】:

您很可能有一个正在计数的隐藏文件。检查隐藏文件,如 thumbs.db 或其他可能存在的系统文件。

【讨论】:

  • 是的,它的拇指,我认为这现在可以工作 [code] int i = Directory.GetFiles(@"C:\Users\William\Documents\H\").Length; if (File.Exists(@"C:\Users\William\Documents\H\Thumbs.db")) { i -= 1; } MessageBox.Show(Convert.ToString (i)); [/code]
  • @TimSchmelter 为您提供了一个很好的解决方案。我会接受那个作为答案并使用他提供的代码。专门检查 Thumbs.db 并不是最好的方法。
【解决方案3】:

你试过这个吗:

System.IO.Directory myDir = GetMyDirectoryForTheExample();
int count = myDir.GetFiles().Length;

【讨论】:

  • 我猜你的意思是DirectoryInfo,而不是静态实用程序类Directory。但是为什么你认为Directory 返回了错误的文件而DirectoryInfo 没有呢?
  • 这不是答案。我知道你不能发表评论,但发布这个只会让你远离那个特权。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-12
  • 2017-09-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多