Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.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# 停止Directory.GetFiles()中的隐式通配符_C#_File_Directory_Filter - Fatal编程技术网

C# 停止Directory.GetFiles()中的隐式通配符

C# 停止Directory.GetFiles()中的隐式通配符,c#,file,directory,filter,C#,File,Directory,Filter,还返回文件,如foo.xml\uquo;是否有办法强制它不这样做,或者我必须编写代码来过滤返回结果 这与命令提示符下的dir*.xml行为相同,但不同于在windows资源管理器中搜索*.xml。此行为是经过设计的。来自(查看注释部分和给出的示例): 具有文件扩展名的搜索模式 只有三个字符返回 扩展名为3或3的文件 更多字符,其中前三个 字符与文件扩展名匹配 在searchPattern中指定 您可以将其限制如下: C#2.0: string[] fileEntries = Directory.

还返回文件,如
foo.xml\uquo;
是否有办法强制它不这样做,或者我必须编写代码来过滤返回结果


这与命令提示符下的
dir*.xml
行为相同,但不同于在windows资源管理器中搜索
*.xml

此行为是经过设计的。来自(查看注释部分和给出的示例):

具有文件扩展名的搜索模式 只有三个字符返回 扩展名为3或3的文件 更多字符,其中前三个 字符与文件扩展名匹配 在searchPattern中指定

您可以将其限制如下:

C#2.0:

string[] fileEntries = Directory.GetFiles(pathName, "*.xml");
string[] fileEntries = Array.FindAll(Directory.GetFiles(pathName,  "*.xml"),
    delegate(string file) {
        return String.Compare(Path.GetExtension(file), ".xml", StringComparison.CurrentCultureIgnoreCase) == 0;
    });
 // or
string[] fileEntries = Array.FindAll(Directory.GetFiles(pathName,  "*.xml"),
    delegate(string file) {
        return Path.GetExtension(file).Length == 4;
    });
C#3.0:

string[] fileEntries = Directory.GetFiles(pathName, "*.xml");
string[] fileEntries = Array.FindAll(Directory.GetFiles(pathName,  "*.xml"),
    delegate(string file) {
        return String.Compare(Path.GetExtension(file), ".xml", StringComparison.CurrentCultureIgnoreCase) == 0;
    });
 // or
string[] fileEntries = Array.FindAll(Directory.GetFiles(pathName,  "*.xml"),
    delegate(string file) {
        return Path.GetExtension(file).Length == 4;
    });

这是因为windows的8.3搜索方法。如果您尝试搜索“*.xm”,您将得到0个结果

您可以在.net 2.0中使用此功能:

string[] fileEntries = Directory.GetFiles(pathName, "*.xml").Where(file =>
   Path.GetExtension(file).Length == 4).ToArray();
// or
string[] fileEntries = Directory.GetFiles(pathName, "*.xml").Where(file =>
    String.Compare(Path.GetExtension(file), ".xml",
        StringComparison.CurrentCultureIgnoreCase) == 0).ToArray();
string[]文件项=
Array.FindAll(System.IO.Directory.GetFiles(路径名,*.xml)),
新谓词(委托(字符串s)
{
返回System.IO.Path.GetExtension=“.xml”;
}));

你知道这种看似奇怪的行为的原因吗?旧版8.3文件名?我的目标是2.0框架,所以不能使用=>语法。@Dan:更新了使用匿名委托的代码@乔恩·赛格尔:是的,没错。MSDN链接上的另一个注释提到,该方法“检查8.3文件名格式和长文件名格式的文件名。”您的第一个C#2.0有一个*.txt,其中应该是*.xml。否则它会完全满足我的需要。谢谢。@Dan:谢谢,更新了。我在本地使用.txt文件进行测试,但在这里错过了:)