単純な Windows ネットワーク共有 (SMB プロトコル) への次の UNC パスを検討してください。
\\host\share
System.Uri
またはのインスタンスを簡単に作成するには、System.IO.DirectoryInfo
そのパスを文字列としてコンストラクターに渡します。
ここで、すべてのセキュリティの問題を脇に置いて、次の 2 つのパスを検討してください。
\\username@host\share
\\username:password@host\share
これらのパスを Uri または DirectoryInfo コンストラクターに単純に渡すことはできません。これらのパスは、主に Linux システムで使用されます。さらに、仮にそうしたとしても、ログオン資格情報を保存しない可能性が高いです。
最終的には、これらをSystem.Uri
実際のパスを表す のインスタンスとSystem.Net.NetworkCredential
、ログオン情報を格納する のインスタンスに変換する方法が必要です。
では、どうすればこの問題に取り組むことができるでしょうか。どこから始めればよいかさえわかりません。から継承System.UriParser
することは、開始するのに適しているようですが、MSDN によると、推奨されていません。
Microsoft は、.NET Framework に同梱されているパーサーを使用することを強くお勧めします。独自のパーサーを構築すると、アプリケーションの複雑さが増し、出荷されたパーサーほどのパフォーマンスは得られません。
ありがとう。
編集
簡単な解決策 (以下に掲載) は、「@」記号の前のすべてがログオン資格情報の一部であり、その後のすべてが実際のパスであると想定することです。ただし、ファイル名に「@」記号が含まれている場合、これは問題になる可能性があります。
\\credential@host\path
: 問題なし
\\credential@host\path@mystorage
: 最初の @ より前のすべてがログオンの一部であるため、これも問題ありません。
\\host\path@mystorage
:今、私たちは逮捕されました。これは、引数として渡されると、間違いなく引数例外をスローします。