C#DirectoryInfo.GetFiles通配符搜索

时间:2015-10-01 21:08:32

标签: c# .net compact-framework

我遇到以下代码段中的行为差异

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");

然后我在上面的模式中获得所有预期的文件。

有人知道为什么会这样吗? 这些文件肯定存在于目标平台上。

出于这个问题范围之外的原因,我强烈希望至少理解为什么这不起作用。

1 个答案:

答案 0 :(得分:3)

我看到了几个问题。我不知道你是否故意留下东西以保持问题简单,或者如果你错过了这些东西,那么我列出了我看到的所有问题:

  1. 您没有使用逐字字符串文字。 DirectoryInfo di = new DirectoryInfo("c:\");无法编译,因为' \'被解释为转义字符。具有逐字字符串文字的相同示例是DirectoryInfo di = new DirectoryInfo(@"c:\");,它可以编译。
  2. Windows CE / Mobile没有驱动器号的概念。桌面上的DirectoryInfo di = new DirectoryInfo(@"c:\");相当于CE / Mobile上的DirectoryInfo di = new DirectoryInfo(@"\");
  3. 您的引用不正确:
      

    ?是0或1个字符的通配符

  4. 它实际上是一个字符的通配符,如on MSDN

    所述
      

    星号(*)和问号(?)用作通配符   字符,因为它们在MS-DOS和Windows中。星号匹配   任何字符序列,,而问号匹配任何   单个字符