隐藏隐藏文档并从 C# 中的目录中排除文件扩展名

Hiding hidden documents and excluding file extensions from a directory in C#

我在互联网上搜索并找到了一些解决方案,但它们似乎对我的情况不起作用,我也不知道为什么。 我列出了工作目录中的所有文件,它们是 .xls 文件。现在,因为我使用的是旧版本的 Office,所以我想排除 .xlsx 文件以及所有临时文件,但这似乎不起作用。我试过了:

 FileAttributes fileAttribute = File.GetAttributes(Directory.GetCurrentDirectory());

   string[] filePaths = Directory.GetFiles(Directory.GetCurrentDirectory(), "*.xls")
   .Where(name => !name.EndsWith(".xlsx") || !name.Contains(@"\~$") 
   || (fileAttribute & FileAttributes.Hidden) == 0).ToArray();

现在我在没有第一行的情况下尝试使用“name.Attributes”,因为“fileAtrribute "but he can't find it. I also tried to search for "?.xls”,但他没有列出任何文件。我做错了什么?

自从您调用 Directory.GetFiles(Directory.GetCurrentDirectory(), "*.xls") 后,您已经排除了 .xlsx 和临时文件。

你有几个问题。首先,您的 || 应该是 &&。您想排除名称不以 xlsx 结尾且不包含 ~$ 且未隐藏的文件。

其次,您对隐藏 属性 的检查看起来不正确。目前您正在获取 文件夹 的属性,然后将其与每个文件进行比较。你真的很想得到每个文件的属性。

综上所述,您需要:

string[] filePaths = Directory.GetFiles(Directory.GetCurrentDirectory(), "*.xls")
.Where(name => !name.EndsWith(".xlsx") && !name.Contains(@"\~$")
&& (File.GetAttributes(name) & FileAttributes.Hidden) == 0).ToArray();

你的逻辑有问题:

string[] filePaths = Directory.GetFiles(Directory.GetCurrentDirectory(), "*.xls")
   .Where(name => !name.EndsWith(".xlsx") || !name.Contains(@"\~$") 
   || (fileAttribute & FileAttributes.Hidden) == 0).ToArray()

你想要ands,而不是ors..

string[] filePaths = Directory.GetFiles(Directory.GetCurrentDirectory(), "*.xls")
   .Where(name => !name.EndsWith(".xlsx") && !name.Contains(@"\~$") 
   && (fileAttribute & FileAttributes.Hidden) == 0).ToArray()

但是,您的文件属性检查的是目录,而不是文件。

所以你真的想要

string[] filePaths = Directory.GetFiles(Directory.GetCurrentDirectory(), "*.xls")
   .Where(name => !name.EndsWith(".xlsx") && !name.Contains(@"\~$") 
   && (File.GetAttributes(name) & FileAttributes.Hidden) == 0).ToArray()