【问题标题】:Hash character in path throws DirectoryNotFoundException路径中的哈希字符引发 DirectoryNotFoundException
【发布时间】:2010-09-18 06:50:50
【问题描述】:

考虑下面的代码sn-p

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(字符串路径,FileMode 模式,FileAccess 访问,Int32 权限,布尔用户权限,FileShare 共享,Int32 缓冲区大小,FileOptions 选项,SECURITY_ATTRIBUTES secAttrs,字符串 msgPath,布尔 bFromProxy)
在 System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share, 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,对象 userData)
在 System.Threading.CompressedStack.Run(CompressedStack 压缩堆栈,ContextCallback 回调,对象状态)
在 System.Xml.XmlTextReaderImpl.OpenUrl()
在 System.Xml.XmlTextReaderImpl.Read()
在 System.Xml.XmlTextReader.Read()

有人知道怎么回事吗?

【问题讨论】:

    标签: c# .net xmltextreader


    【解决方案1】:

    添加到 Konrad 的答案中,如果您使用的是 file:// 协议,则需要使用 %23 表示 # 那么它可以正常工作

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

        你为什么不使用

        XmlTextReader rdr = new XmlTextReader(fullPath);

        【讨论】:

          猜你喜欢
          • 2018-01-07
          • 2015-07-26
          • 1970-01-01
          • 1970-01-01
          • 2011-10-31
          • 1970-01-01
          • 2012-07-13
          • 2021-09-24
          相关资源
          最近更新 更多