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