C# 2 つの相対ネットワーク パスを結合する

okwaves2024-01-25  9

System.IO.Path メソッドを使用すると、2 つのパスを結合する際に非常に奇妙な結果が得られました。

string Dir = "\server1\customers\Test";
string path = "..\..\customers\Test\hello.pbt";

path = Path.Combine(Dir, path);
// path = "\server1\customers\Test\..\..\customers\Test\hello.pbt"

次に、これらのパスを結合したいと思います。

path = "\server1\customers\Test\hello.pbt" // aim

しかし、Path.GetFullPath メソッドを使用すると、本来のようにサーバーに戻りません。

path = Path.GetFullPath(path)
// path = "\server1\customers\customers\Test\hello.pbt"

「2 つの相対パスと C# の答えを組み合わせる」で説明されているすべての方法をすでに試しました

3

Combine メソッドは、最初のメソッドと 2 番目のメソッドを単純に連結します。実際、結果は奇妙なものではなく、予想通りです。 「組み合わせ」のルールとは何ですか?うおと;それは期待される結果につながるでしょうか?

– モン・ジュウ

2020 年 9 月 3 日 11:40

はい、わかっていますが、1 回ではなく 2 回後戻りする必要があります。

– tuke307

2020 年 9 月 3 日 11:56



------------------------

問題は、.NET (およびおそらく Windows) が \\server1\customers の親を \\server として認識しないことのようです。

技術的には、\\server は有効な UNC パスではないようです (つまり、そこにファイルを直接保存することはできません)。

var thisWorks = Directory.GetParent(Dir);

var thisIsNull = Directory.GetParent(Directory.GetParent(Dir).FullName);

したがって、..\\..\\ を要求すると、ディレクトリ ツリーのそれ以上上位に進むことはできないと判断されるため、それらの 1 つが事実上無視されます...

4

その回答に感謝します!!まったくその通りです。server1 は有効な UNC パスではありません。その「フォルダー」には何も作成できません。問題を理解するのに役立ちました

– tuke307

2020 年 9 月 3 日 12:28

@tony_370 どういたしまして。私も、ちょうどその時自分で遊んで読んでみるまで、そのことを知りませんでした。

– mjwills

2020 年 9 月 3 日 12:31

DirectoryInfo を見ると、サーバー パスが存在しないことがわかります。 「...」の問題を解決する機能はありますか?それにもかかわらず、フォルダは存在しますか?

– tuke307

2020 年 9 月 3 日 12:37

簡単に言うと、@tony_370 自身でそれを書く必要があるということです。

– mjwills

2020 年 9 月 3 日 12:38

総合生活情報サイト - OKWAVES
総合生活情報サイト - OKWAVES
生活総合情報サイトokwaves(オールアバウト)。その道のプロ(専門家)が、日常生活をより豊かに快適にするノウハウから業界の最新動向、読み物コラムまで、多彩なコンテンツを発信。