我遇到以下代码段中的行为差异
DirectoryInfo di = new DirectoryInfo("c:\");
FileInfo[] textFiles = di.GetFiles("log_???.???.txt");
在哪里?是0或1个字符的通配符,因此这应返回与模式匹配的路径中的文件:
log_..txt
log_0.0.txt
log_00.00.txt
log_000.000.txt
在为Windows .NET framework 3.5(桌面)编译时会返回所有这些文件,但在使用.NET Compact Embedded Framework 3.5的目标嵌入式Windows CE 6上,我没有匹配。
如果我从
更改通配符模式FileInfo[] textFiles = di.GetFiles("log_???.???.txt");
到
FileInfo[] textFiles = di.GetFiles("log_*.*.txt");
然后我在上面的模式中获得所有预期的文件。
有人知道为什么会这样吗? 这些文件肯定存在于目标平台上。
出于这个问题范围之外的原因,我强烈希望至少理解为什么这不起作用。
答案 0 :(得分:3)
我看到了几个问题。我不知道你是否故意留下东西以保持问题简单,或者如果你错过了这些东西,那么我列出了我看到的所有问题:
DirectoryInfo di = new DirectoryInfo("c:\");
无法编译,因为' \'被解释为转义字符。具有逐字字符串文字的相同示例是DirectoryInfo di = new DirectoryInfo(@"c:\");
,它可以编译。DirectoryInfo di = new DirectoryInfo(@"c:\");
相当于CE / Mobile上的DirectoryInfo di = new DirectoryInfo(@"\");
。?是0或1个字符的通配符
它实际上是一个字符的通配符,如on MSDN
所述星号(*)和问号(?)用作通配符 字符,因为它们在MS-DOS和Windows中。星号匹配 任何字符序列,,而问号匹配任何 单个字符。