我在互联网上搜索并找到了一些解决方案,但它们似乎不适用于我的情况,我不知道为什么。 我列出了工作目录中的.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”,但他找不到它。我也试图搜索“?.xls”,但他没有列出任何文件。我做错了什么?
答案 0 :(得分:2)
您遇到逻辑问题:
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()
但是,您的fileattribute正在检查目录,而不是文件。
所以你真的想要
string[] filePaths = Directory.GetFiles(Directory.GetCurrentDirectory(), "*.xls")
.Where(name => !name.EndsWith(".xlsx") && !name.Contains(@"\~$")
&& (File.GetAttributes(name) & FileAttributes.Hidden) == 0).ToArray()
答案 1 :(得分:1)
你有几个问题。首先,您的||
应该是&&
&#39}。您希望排除名称不以xlsx结尾的文件,并且它不包含〜$ AND,而不会隐藏它。
其次,您对隐藏属性的检查看起来不正确。目前,您正在抓取文件夹的属性,然后将其与每个文件进行比较。你真的想得到每个文件的属性。
总之,您需要:
string[] filePaths = Directory.GetFiles(Directory.GetCurrentDirectory(), "*.xls")
.Where(name => !name.EndsWith(".xlsx") && !name.Contains(@"\~$")
&& (File.GetAttributes(name) & FileAttributes.Hidden) == 0).ToArray();
答案 2 :(得分:0)
由于您调用了Directory.GetFiles(Directory.GetCurrentDirectory(),“* .xls”),因此您已经排除了.xlsx和临时文件。