- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
作为一个简化的示例,我正在执行以下操作
IEnumerable<string> files = Directory.EnumerateFiles(path, @"2010*.xml",
SearchOption.TopDirectoryOnly).ToList();
在我的结果集中,我得到了一些与文件模式不匹配的文件。根据 msdn searchPattern 通配符是“零个或多个字符”而不是正则表达式。一个例子是我得到一个文件名作为“2004_someothername.xml”。
有关信息,文件夹中有超过 25,000 个文件。
有人知道发生了什么事吗?
最佳答案
这是由于 Windows 如何进行通配符匹配 - 它在其通配符搜索中包含编码的 8.3 文件名,从而导致一些令人惊讶的匹配!
解决此错误的一种方法是重新测试通过操作系统通配符匹配返回的所有文件结果,并通过通配符与每个(长)文件名的手动比较进行测试。另一种方式是turn off 8.3 filenames altogether via the registry .我曾多次被此问题困扰,包括在命令提示符下通过基于通配符的 del 命令删除重要(不匹配)文件。
总而言之,要非常小心,尤其是当您在一个目录中有许多文件时,如果您根据操作系统文件/通配符匹配做出任何关键的生产决策或采取任何操作,而没有对以下文件进行二次验证结果。
这是一个 explanation这种奇怪的行为。
来自 O'Reilly's site 的另一个解释.
关于c# EnumerateFiles 通配符返回不匹配?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5262025/
成员函数DirectoryInfo::EnumerateFiles只能抛出 DirectoryNotFoundException 和 SecurityException 而静态函数 Directory
我正在编写一个程序,当给定日期、文件夹路径和文件扩展名时,该程序将查看文件夹并查找上次访问时间从月初到当前日期的所有文件,并且只有具有传递的文件扩展名的文件。 我要查找的文件始终位于文件夹树中的同一级
我正在使用 EnumerateFiles 获取目录中的所有 *.md: foreach (var mdName in Directory.EnumerateFiles(Path.Combine(Bas
作为一个简化的示例,我正在执行以下操作 IEnumerable files = Directory.EnumerateFiles(path, @"2010*.xml", SearchOptio
根据Microsoft Docs site for Directory.EnumerateFiles ,搜索模式参数将匹配任何以指定模式开头的扩展名,只要它正好是 3 个字符。但是,这不适用于文件共享
.NET 4.0 中有一个很好的新方法,可以通过枚举以流式方式获取目录中的文件。 这里的问题是,如果希望枚举所有文件,则可能无法提前知道哪些文件或文件夹受到访问保护,并且可能会抛出 Unauthori
我想要一个文件夹中所有 xml 文件的列表,如下所示: foreach (var file in Directory.EnumerateFiles(folderPath, "*.xml")) {
在我问的问题中Retrieve a list of filenames in folder and all subfolders quickly还有一些我发现的,似乎搜索许多文件的方法是使用 Enum
所以我正在开发一个程序,它将列出目录中的所有文件。很简单。基本上,当我这样做时:List dirs = new List(Directory.EnumerateFiles(target)); ,我不希
下面的语句有错误,帮忙修正 long siz = dirinfo.EnumerateFiles().Sum(file => file.length); 'System.IO.DirectoryInf
我正在尝试编写一个程序来将我的 SQL 数据库备份文件复制到 NAS。它以前是工作的,但后来我添加了检查路径是否存在,现在当它试图复制文件时它得到一个异常说“System.IO.IOException
我有一个非常罕见的行为。 我正在使用 Windows 10 x64 和 Visual Studio 2013,当我在 32 位应用程序中运行此代码时 Directory.EnumerateFiles(
我目前有一个扫描网络共享的程序。为此,它首先枚举共享上的所有文件和目录。这是一个非常缓慢的过程。我目前使用以下代码,摘自本网站 2011 年的回答。 static class SafeWalk
我有一个包含 2 个文件的目录: 文件1.xls 文件2.xlsx 如果我这样做: directoryInfo.EnumerateFiles("*.xls", SearchOption.TopDire
对于我的 WPF 项目,我必须计算单个目录(可能有子目录)中的总文件大小。 示例 1 DirectoryInfo di = new DirectoryInfo(path); var totalLeng
Directory.EnumerateFiles 方法的默认读取顺序是什么?是否一致? 根据我目前的经验,这似乎是文件创建的日期,但我无法找到对此的确认。 我问的原因是因为我正在处理的程序的一部分将二
我有以下代码: List result = new List(); foreach (string file in Directory.EnumerateFiles(path,"*.*",
在 .NET 4 中,有这个 Directory.EnumerateFiles()看起来很方便的递归方法。 但是,如果在递归中发生异常,我如何继续/恢复并继续枚举其余文件? try { var f
msdn ( https://msdn.microsoft.com/en-us/library/dd383458(v=vs.110).aspx) 说: EnumerateFiles 和 GetFile
我已经阅读了关于 Directory.EnumerateFiles 之间差异的讨论和 Directory.GetFiles . 我知道他们在内部都使用System.IO.FileSystemEnume
我是一名优秀的程序员,十分优秀!