路径中的哈希字符抛出DirectoryNotFoundException

时间:2008-10-21 08:59:04

标签: c# .net xmltextreader

请考虑以下代码段

private void ProcessFile(string fullPath) {
    XmlTextReader rdr = new XmlTextReader("file:\\\\" + fullPath);
    while (rdr.Read()) {
        //Do something
    }
    return;
}

现在,当传递如下路径时,此功能正常:

“C:\ Work Files \ Technical Information \ Dummy.xml”

但是在传递时会抛出错误

“C:\ Work Files \ #Technical Information \ Dummy.xml”

请注意,指定的所有文件夹和文件都存在,并且哈希字符是路径的有效字符。错误详情如下:

System.IO.DirectoryNotFoundException:找不到路径'C:\ Work Files \'的一部分。
在System.IO .__ Error.WinIOError(Int32 errorCode,String maybeFullPath)
在System.IO.FileStream.Init(String path,FileMode mode,FileAccess access,Int32 rights,Boolean useRights,FileShare share,Int32 bufferSize,FileOptions options,SECURITY_ATTRIBUTES secAttrs,String msgPath,Boolean bFromProxy)
在System.IO.FileStream..ctor(字符串路径,FileMode模式,FileAccess访问,FileShare共享,Int32 bufferSize)
在System.Xml.XmlDownloadManager.GetStream(Uri uri,ICredentials凭证)
在System.Xml.XmlUrlResolver.GetEntity(Uri absoluteUri,String role,Type ofObjectToReturn)
在System.Xml.XmlTextReaderImpl.OpenUrlDelegate(Object xmlResolver)
在System.Threading.CompressedStack.runTryCode(Object userData)
在System.Runtime.CompilerServices.RuntimeHelpers.ExecuteCodeWithGuaranteedCleanup(TryCode代码,CleanupCode backoutCode,Object userData)
在System.Threading.CompressedStack.Run(CompressedStack compressedStack,ContextCallback回调,对象状态)
在System.Xml.XmlTextReaderImpl.OpenUrl()
在System.Xml.XmlTextReaderImpl.Read()
在System.Xml.XmlTextReader.Read()

有人知道发生了什么事吗?

3 个答案:

答案 0 :(得分:4)

添加到Konrad的答案,如果您使用的是file://协议,则需要将#23用于#然后才能正常工作

答案 1 :(得分:2)

尝试省略file:///协议前缀。没有人,它对我有用。我相信.NET会在#之后截断任何部分,如果它认为这是一个URL。这只是基于错误消息的猜测,但考虑到#字符之后的部分不是由服务器处理而是由其他方案中的客户端(例如Web浏览器)处理,这似乎是合乎逻辑的。

答案 2 :(得分:0)

为什么不使用

XmlTextReader rdr = new XmlTextReader(fullPath);