【发布时间】:2011-06-24 05:18:40
【问题描述】:
我在递归调用中使用以下代码:
var files = di.GetFiles("*.jpg");
di 是传入函数的 DirectoryInfo。假设某个驱动器 k 的根目录中有一个文件 tiger.jpg。有时,结果不是 k:\tiger.jpg 而是 k:\iger.jpg。我不知道为什么或如何。有没有人有过同样的行为?
编辑 1:即使使用目录名称也会出现这种情况,因为递归函数不会列出子目录中的图像。我认为它主要是 FAT(因为它通常从 SD 卡或 USB 记忆棒等媒体读取,有时从 DVD 或 CD 读取)。
每个返回的 FileInfo 对象的全名都使用事件发出信号。接收者创建一个新对象,该对象将路径作为构造函数的参数。然后构造函数调用一个方法,该方法使用路径获取有关 jpeg 文件的信息:
FileStream fs = File.Open ( this.Path, FileMode.Open );
Image img = Image.FromStream ( fs, false, false );
这是发生异常的地方。当我从对框架组件的调用中获取文件时,我不会再次明确检查它们是否存在 - 我可以将其构建到系统中,但这并不能解决我的问题。
我忘记了一件事:这不会发生在我们的测试系统上,而是发生在全球的系统上:(
【问题讨论】:
-
很奇怪……你确定不是对文件名进行了一些奇怪的字符串处理?
-
当这种情况发生时,您能告诉我们什么?它只在根目录上吗?它仅在 FAT 文件系统上吗?是否总是相同的文件有问题?
-
显示您检查收到的文件名的代码。
-
它总是发生在相同的文件名上吗?还是每次运行时都在同一个文件上?
-
在示例中,它出现在每个文件中。