首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >GetFiles:错误结果

GetFiles:错误结果
EN

Stack Overflow用户
提问于 2011-06-24 05:18:40
回答 3查看 180关注 0票数 4

我在递归调用中使用了以下代码:

代码语言:javascript
复制
var files = di.GetFiles("*.jpg");

di是传递给函数的DirectoryInfo。假设某个驱动器k的根目录中有一个文件tiger.jpg。有时,结果不是k:\tiger.jpg,而是k:\iger.jpg。我不知道为什么或者怎么做。有没有人有过同样的行为?

编辑1:它似乎发生在目录名中,因为递归函数没有在子目录中列出图像。我认为它主要是脂肪(因为它通常是从媒体,如SD卡或USB卡,有时从DVD或CD )。

每个返回的FileInfo对象的全名都是使用一个事件发出信号的。接收方创建一个新对象,该对象将路径作为构造函数的参数。然后,构造函数调用一个使用路径获取jpeg文件信息的方法:

代码语言:javascript
复制
FileStream fs = File.Open ( this.Path, FileMode.Open );
Image img = Image.FromStream ( fs, false, false );

这就是异常发生的地方。当我从调用框架组件获得文件时,我不会再次显式地检查它们是否存在--我可以将它们构建到系统中,但这并不能解决我的问题。

有一件事我忘了:这不是发生在我们的测试系统上,而是发生在全球的一个系统上:

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-12-27 20:50:27

在这种特殊情况下,似乎是硬件的特定组合触发了一些奇怪的行为。Win32 API显示了正确的结果,而.NET API返回了错误的结果。

这并不是所有安装都可以复制的。唯一明显的区别是本地化设置,但即使在功能上更改它们也无助于我们在本地机器上找到一个副本。由于新的硬件修订将推出,没有进一步的调查。

如果您确信您已经涵盖了来自其他答案的所有建议,并且有相同的问题,您可能需要与OS供应商联系。

票数 1
EN

Stack Overflow用户

发布于 2011-06-24 11:33:30

可能是错误的吸管,但你试过逃避\吗?

k:\tiger.jpg示例中,C#将把\t作为一个选项卡读取。这不应该发生,但我已经看到它发生了。尝试编写它,以便将所有反斜杠替换为\\

票数 3
EN

Stack Overflow用户

发布于 2011-06-24 07:05:02

反病毒有时会在这里发挥作用。如果有一个生成文件的进程和一个正在使用该文件的进程,则可能存在争用条件。

与其检查文件是否存在,不如调用File.Open,然后尝试/捕捉一个IOException。然后,您将需要检查当您遇到异常时发生了什么。

您永远不能假设文件存在。

至于为什么要丢失文件名的字母,如何生成this.Path

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6463720

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档