1

次のコードスニペットを検討してください

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:\ WorkFiles\'の一部が見つかりませんでした。
System.IO .__ Error.WinIOError(Int32 errorCode、String mayFullPath)
at 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)
at System.IO.FileStream..ctor(String path、FileMode mode、FileAccess access、FileShare share、Int32 bufferSize)
at System.Xml.XmlDownloadManager.GetStream(Uri uri、ICredentialscredentials)atSystem

System.Xml.XmlTextReaderImpl.OpenUrlDelegate(Object xmlResolver)の Xml.XmlUrlResolver.GetEntity(Uri AbsoluteUri、String role、Type ofObjectToReturn )
System.Threading.CompressedStack.runTryCode(Object userData)
at System.Runtime.CompilerServices.RuntimeHelpers.ExecuteCodeWithGuaranteedCleanup(TryCode code、CleanupCode backoutCode、Object userData)
at System.Threading.CompressedStack.Run(CompressedStack CompressionStack、ContextCallback callback、Object state)
System.Xml.XmlTextReaderImpl.OpenUrl()
でSystem.Xml.XmlTextReaderImpl.Read()
でSystem.Xml.XmlTextReader.Read()で

誰が何が起こっているのか知っていますか?

4

3 に答える 3

4

Konradの答えに加えて、file://プロトコルを使用している場合は、#に%23を使用する必要があり、正常に機能します。

于 2008-10-21T09:08:07.653 に答える
2

file:///プロトコルプレフィックスを省略してみてください。それは私のために1つなしで動作します。#.NETは、これがURLであると信じている場合、その後の部分を切り捨てると思います。これはエラーメッセージに基づく推測にすぎませんが、#文字の後の部分がサーバーではなく、他のシナリオ(Webブラウザーなど)のクライアントによって処理されることを考えると、論理的に思われます。

于 2008-10-21T09:06:28.517 に答える
0

使ってみませんか

XmlTextReader rdr = new XmlTextReader(fullPath);

于 2008-10-21T09:06:53.070 に答える