基本上,我有这段代码:
DirectoryInfo dir = new DirectoryInfo(@"\\MYNETWORK11\ABCDEFG\ABCDEFGHIJKL\00806\");
FileInfo[] files = dir.GetFiles("200810*");
我希望它匹配任何以200810开头的文件。但是,它匹配名为
的文件20070618_00806.bak和20070817_00806.bak (星号不在文件名中,这是我可以包含下划线的唯一方式)
我在命令提示符下使用dir尝试了它,它也匹配这些文件。为什么呢?
编辑:
也许使用C:因为这个例子不是一件好事。我实际查询的目录是网络共享 \\ MYNETWORK11 \ ABCDEFG \ ABCDEFGHIJKL \ 00806 \
如果检查短名称与它有关,20070817_00806.bak不会是200708~1.bak吗?这与
不匹配答案 0 :(得分:14)
msdn表示
“因为此方法检查 具有8.3文件名的文件名 格式和长文件名格式, 搜索模式类似于“
*1*.txt
” 可能会返回意外的文件名。对于 例如,使用搜索模式 “*1*.txt
”将返回 “longfilename.txt
”因为 相当于8.3文件名格式 是“longf~1.txt
”。“
这可能是原因吗?
答案 1 :(得分:6)
从命令行尝试:
dir /x 200810*
“/ x”将显示短文件名以及长文件名。这可以让你看看短文件名是否真的以“200810”开头。
答案 2 :(得分:4)
我无法通过命令行或测试应用程序重现此问题:
c:\Users\Jon\Test>echo > 20070618_00806.bak
c:\Users\Jon\Test>echo > 2007081700806.bak
c:\Users\Jon\Test>dir 200810*
Volume in drive C is OS
Volume Serial Number is B860-7E20
Directory of c:\Users\Jon\Test
File Not Found
和C#app:
using System;
using System.IO;
class Test
{
static void Main()
{
foreach (var file in new DirectoryInfo(".").GetFiles("200810*"))
{
Console.WriteLine(file);
}
}
}
(这不会打印任何结果。)
也许在某处有一些操作系统设置有所不同......你使用哪种操作系统? (我在32位Vista上。)
答案 3 :(得分:1)
GetFiles将搜索长文件名和短文件名...它不是以某种方式匹配短文件名吗?