LoginSignup
1
2

More than 5 years have passed since last update.

C#でパス操作。相対パス化など。

Posted at

C#で絶対パスから相対パスに変換するときに、Uriクラスを使って

var dir = new Uri(@"C:\aaa\bbb\");
string absPath = @"C:\aaa\bbb\ccc\a.txt";
string rel = dir.MakeRelativeUri(new Uri(absPath)).ToString();
// rel = ccc/a.txt

というようなことをよくやるのですが、気になったことがあったので確認してみました:

  • 大文字小文字の区別
  • 正規化

(動作確認環境: Windows 10 .NET Framework 4.7.1)

大文字小文字の区別

var dir = new Uri(@"C:\Aaa\bbb\");
string absPath = @"C:\aaa\bbb\ccc\a.txt";

結果はccc/a.txtを変化ありませんでした。
Windowsということで、大文字小文字の区別はしないということでしょうか。

正規化

var dir = new Uri(@"C:\Aaa\bbb\..\bbb\");
string absPath = @"C:\aaa\bbb\ccc\a.txt";
System.Console.WriteLine(dir.ToString());
// file:///C:/aaa/bbb/
System.Console.WriteLine(
    dir.MakeRelativeUri(new Uri(absPath)).ToString());
// ccc/a.txt

Uriを生成した時点で正規化されるようです。

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2