我尝试按扩展程序分隔文件夹中的文件,使用以下代码:
Dim file_list3 As String() = Directory.GetFiles(path, "*.xls")
Dim file_list4 As String() = Directory.GetFiles(path, "*.xlsm")
但所有" .xls"文件最终在列表4中与" .xlsm"文件。如何保留" .xls"的子集?飞出" .xlsm"文件?
感谢。
答案 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()