如何过滤文件扩展名

时间:2015-01-08 16:08:05

标签: vb.net file-extension

我尝试按扩展程序分隔文件夹中的文件,使用以下代码:

Dim file_list3 As String() = Directory.GetFiles(path, "*.xls")
Dim file_list4 As String() = Directory.GetFiles(path, "*.xlsm")

但所有" .xls"文件最终在列表4中与" .xlsm"文件。如何保留" .xls"的子集?飞出" .xlsm"文件?

感谢。

2 个答案:

答案 0 :(得分:0)

我找到了答案:

Dim file_list3 = Directory.GetFiles(path, "*.xls").Where(Function(item) item.ToLower().EndsWith(".xls"))
Dim file_list4 = Directory.GetFiles(path, "*.xlsm").Where(Function(item) item.ToLower().EndsWith(".xlsm"))

感谢。

答案 1 :(得分:0)

我终于设法重现了所记录的行为 好像我已经在我的工作电脑上设置了这个命令

fsutil 8dot3name set 0

此命令禁用在MS-DOS时间创建旧的8.3短文件名 使用此配置,命令Directory.GetFiles(path, "*.xls")仅返回具有指定扩展名的文件,而不返回以XLS开头的其他扩展名。

应用命令

fsutil 8dot3name set 1

我希望OP能够解释相同的结果,但文件夹中的文件不是这种情况,因为它们是在禁用8dot3name标志时创建的。 但是一个名为test.xlsm的新文件开始出现在搜索模式返回的文件中*.xls

因此,要解决您的问题,您可以使用文章fsutil中所述的How to disable 8.3 file name creation on NTFS partitions命令,也可以使用strip选项删除旧的8.3条目,或者只使用一点上面代码的变体

 Dim all_files = Directory.EnumerateFiles(path, "*.xls")
 Dim file_list3 = all_files.Where(Function(x) Path.GetExtension(x).ToLower = ".xls").ToList()
 Dim file_list4 = all_files.Where(Function(x) Path.GetExtension(x).ToLower = ".xlsm").ToList()