请考虑以下代码段
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()
有人知道发生了什么事吗?
答案 0 :(得分:4)
添加到Konrad的答案,如果您使用的是file://协议,则需要将#23用于#然后才能正常工作
答案 1 :(得分:2)
尝试省略file:///
协议前缀。没有人,它对我有用。我相信.NET会在#
之后截断任何部分,如果它认为这是一个URL。这只是基于错误消息的猜测,但考虑到#
字符之后的部分不是由服务器处理而是由其他方案中的客户端(例如Web浏览器)处理,这似乎是合乎逻辑的。
答案 2 :(得分:0)
为什么不使用
XmlTextReader rdr = new XmlTextReader(fullPath);