Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# C DirectoryInfo.GetFiles通配符搜索_C#_.net_Compact Framework - Fatal编程技术网

C# C DirectoryInfo.GetFiles通配符搜索

C# C DirectoryInfo.GetFiles通配符搜索,c#,.net,compact-framework,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桌面编译时都会返回,

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

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桌面编译时都会返回,但在目标嵌入式Windows CE 6和.NET Compact embedded framework 3.5上,我没有找到匹配项

如果我将通配符模式从

FileInfo[] textFiles = di.GetFiles("log_???.???.txt");

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

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


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

我看到了几个问题。我不知道你是否故意漏掉了一些东西来保持问题的简单,或者你是否遗漏了这些东西,所以我列出了我看到的所有问题:

您没有使用逐字字符串文本。DirectoryInfo di=newdirectoryinfoc:\;未编译,因为“\”被解释为转义字符。与逐字字符串文字相同的示例是DirectoryInfo di=newDirectoryInfo@c:\; 它可以编译。 Windows CE/Mobile没有驱动器号的概念。DirectoryInfo di=newDirectoryInfo@c:\; 在桌面上与DirectoryInfo di=newdirectoryinfo@;在CE/Mobile上。 您的报价不正确: ??是0或1个字符的通配符

它实际上是前面提到的1个字符的通配符

星号*和问号用作通配符 字符,如MS-DOS和Windows中的字符。星号匹配 任何字符序列,而问号匹配任何 单个字符


对于第1点和第2点,正如您所怀疑的那样,为了简洁起见,我省略了驱动器号和文字字符串前缀。对于第3点,目录信息用法本身引用了?匹配0或1个字符。见下面的Nikunj链接。你提到的链接引用了MSDO。正如我在最初的问题中所说,它检测到0-3个字符作为???的字符串???这与你的链接相矛盾。这意味着GetDirectoryInfo对.Net桌面不使用MSDOS策略,但对compact也可能如此。在这一点上,似乎缺少针对?NET Compact的文档问题。为了完整起见,我尝试在DOS窗口中创建三个.txt文件0.txt、00.txt和000.txt。然后我发出了一个dir???.txt命令。所有三个文件都已返回。所以,我不知道你提到的链接指的是我遇到的问题。太好了。事实上,Compact Framework 3.5文档指的是?通配符匹配一个字符。唉,好球。显然,在.NET Framework 3.5之后,“?”的含义从您一直指出的一个字符变为0或1个字符。谢谢你的耐心和帮助。如果你编辑你的答案,包括上面的链接,我将能够编辑它给你适当的信用。问题已经更新。这真是一团糟。我从未听说过在任何平台上使用“?”匹配一个或多个字符,但很明显,Windows CMD.EXE目前正在这样做。这对*和都有什么意义?匹配一个或多个字符?为什么两个不同的通配符表示相同的内容?修辞,我知道这不是你设计的!底线是Windows CMD.EXE、MSDOS、.NET 4.5/4.6不是您遇到问题的平台。您遇到问题的平台记录为与一个字符匹配的“?”。
FileInfo[] textFiles = di.GetFiles("log_*.*.txt");