今天我遇到了一个非常奇怪的C#错误。奇怪的C#Directory.GetFiles错误
我写了一个小方法,它应该搜索并处理任何给定目录中的所有XNA的xnb文件。在大多数计算机上,它工作得很好 - 预计会出现一些情况(XP中有两个人报告了问题)。
我只能重现此错误Win7上一次(和关闭过程中,VC#外)
这里是方法:
files = Directory.GetFiles("Content\\Textures\\Houses\\Roof");
for (int i = 0; i < files.Length; i++)
{
string path = files[i].Substring(BasicUtils.FindsubString(files[i], "Textures")).Replace(".xnb", "");
roofTextures.Add(DataCenter.AddTexture(DataCenter.Content.Load<Texture2D>(path)));
}
这种方法得到的所有文件给定的目录,在这种情况下,“内容\纹理\房屋\屋顶”。在这里出现错误:在这个目录中有三个文件(都带有.xnb扩展名)。在我的电脑上使用win7(和另外四个使用win7的电脑),这项工作就像它应该的一样。
但是,当有人用win XP试图运行这种方法时,操作系统会返回4个文件 - 这三个真正退出的文件,以及上次打开的OpenFileDialog文件(即使文件完全不同的目录中, Directory.Getfiles就像它在那里,在那个目录中那样回复它)。
而当我想打开它,该方法不找到该文件,并抛出一个异常。
我能够通过检查给定的后退文件是否具有.XNB扩展名来克服这个错误,但是这个错误真的让我感到惊讶。
任何想法,我犯了一个错误?
在Winform区域中的openfiledialog,而在另一个DLL中搜索和打开文件,完全不同的类,在一个私人的,不可访问的方法 - 他们甚至不应该以任何方式沟通!我没有任何想法,我怎么回到那个文件名。
编辑:
我觉得我没有做我的问题明确(对不起,那:)。
因此,该方法中的问题:当我使用Directory.GetFiles(...)时,它返回三个真正在目录中的文件(三个.xnb文件)。但对于某些用户(使用Windows XP),此方法会返回一个.sbm扩展名(文件类型是我的程序使用),该目录中包含ISNT。我搜索了相当长的时间,直到我发现:当他们使用Openfiledialog时,这个问题才会弹出 - 当他们这样做时,Directory.GetFiles(...)将返回之前打开的文件 - 但实际上它没有。我能解决这个问题,但仍不知道为什么会发生这种情况。我通过MSDN数据库进行了搜索,但我没有发现任何有关这样的错误的信息。我试图重新创建VS内部的bug,希望它能提供一些线索 - 但我无法做到。有一次这个问题也出现在我身上(从win7开始),但是因为它不在VS之内,所以我无法进行调试。目前只有两个赢得XP用户报告,而它的作品适合每个人使用win7。
哦,我再次检查 - 在该目录中没有隐藏文件(特别是以前打开的文件)。只有三个所需的文件里面。)
编辑2:
这里是链接的问题,并创建问题的步骤:
https://www.dropbox.com/s/4uv1hbvzkhpwprw/House%20Creator%20V2%20With%20error.zip
启动Housecreator.exe 点击 “Load” 按钮。 选择“郊区房屋1.sbm”
当其加载时,单击“3D渲染”按钮。
这是错误应该弹出的步骤。该程序将搜索(Content)\ Textures \ Houses \ OuterWall中的“Suburb house 1.sbm”文件(有时主要用于xp用户,但有时它也适用于我,但仅限于Visual Studio以外) 。
需要XNA框架3.1和.NET 3.5以及试用该程序。只有当用户使用“加载”选项时才会弹出错误。
编辑3:我在连续三次出错。给定目录内没有额外的文件。现在它再次工作,没有任何可见的变化O.o
从想法出发,为什么会发生这种情况。
编辑4:
我放弃了。我敢肯定,我在某个地方犯了一个错误(我不认为这可能是这个巨大的错误,并且没有人注意到),但无法捕捉到它在哪里。我过滤文件,这应该工作。谢谢大家的帮助! :)
第一步是如果错误来自Directory.GetFiles或来自您自己的代码,则缩小范围。看起来你更有可能在“roofTextures”中添加了一些东西,但没有意识到它。 –
什么例外和地点?这个fundemental信息如何失踪?难怪你无法调试! – banging
想说什么可能会说:“抛出的异常在哪里?”......可以毫不侮辱地说。 – hometoast