2014-07-21 42 views
19

我正在写一个简单的控制台应用程序,它将从测试文件中读取xml并将其反序列化为一个对象。什么导致NotSupportedException(“不支持给定路径的格式”),而使用有效的路径?

var s = File.ReadAllBytes("‪G:\\Temp\\Publishing\\2.txt"); 
Stream _response = File.OpenRead("‪G:\\Temp\\Publishing\\2.txt"); 
var s = File.ReadAllBytes(@"‪g:\temp\publishing\2.txt"); 
var s = File.ReadAllBytes(@"‪G:\Temp\Publishing\2.txt"); 

我已经尝试了所有上述的读取该文件,它总是抛出NotSupportedException与不支持给定的路径的格式的消息

什么是上述路径中的格式错误?

+0

此外,无关,是否有一个原因,你使用'ReadAllBytes'而不是得到一个'StreamReader'的路径和调用'ReadToEnd()'?或者更好的做法是,将路径加载到你得到的XML解析代码中(例如'XElement.Load(string)'? –

+0

@MatthewHaugen:这个问题说他们都抛出错误,我会反驳说“为什么如果你想使用一个StreamReader来做你真正想要的东西吗?“ –

+0

@BillyONealtouché。我读得太快了,对于那个,我很抱歉,删除我的评论。至于你的第二点,我完全同意,但我认为它可能会这是一个有益的调试步骤,它看起来像一个奇怪的问题,所以也许它会有一个奇怪的解决方案,更不用说,如果OP没有意识到任何一种选择,我宁愿将它们提供给广泛的故障排除 –

回答

29

根据参考源:如果:的在路径中的索引是在第三位置或更高http://referencesource.microsoft.com/#mscorlib/system/io/filestream.cs#732

NotSupportedException将被抛出。 (人们会认为:是第二个字符)你确定在源代码中没有零宽度的组合字符或其他类似的Unicode shenanigans吗?

+2

我刚刚使用 'string _path = @“G:\ Temp \ Publishing \ 2.txt”; int i = path.IndexOf(':');'和令人惊讶的':'的索引来检查索引是2。但是,如何/为什么? –

+12

我已经从'Windows资源管理器'复制了路径,它导致了一些我仍然明白的在路径字符串中添加未知/隐藏字符并将':'推到第三位的东西。我已经重新输入完​​整的路径,它的工作原理。 –

+3

@LibinTK我将您的示例粘贴到Visual Studio中,将其保存为文本文件,然后在文本编辑器中将其打开。在“和G之间有'U + 202A LEFT-TO-RIGHT EMBEDDING'字符。 –

相关问题