Introduction
前回は、デバッグ時に引数を指定して実行してみました。
今回はファイルパスを使ったAPIのメモです。
System.IO.DirectoryInfo
相対パス扱いなの?
前回、デバッグ引数として、 ~/ を指定しました。
Linuxにおいてこのパスは、実行ユーザのホームディレクトリを示します。
(~ も同様。) これを使って、下記のコードを実行します。
1 | using System; |
よくある、指定したパスの配下のファイルを列挙するプログラムです。
これを実行すると下記の例外を投げます。
1 | Unhandled Exception: System.IO.DirectoryNotFoundException: Could not find a part of the path '/home/XXXXXX/git/Demo/DotNetCoreLinux3/~/'. |
Could not find a part of the path ‘/home/XXXXXX/git/Demo/DotNetCoreLinux3/~/‘ という記述から、指定したパスは、カレントディレクトリからの相対パス扱いになってしまいました。
なので、System.IO.Path.GetFullPath メソッドで絶対パスに変換してみます。
1 | using System; |
変わらず同じ例外が出力されます。
デバッグコンソールの出力は下記のようになります。
1 | Argument is '~' |
なので、**~** はダメな模様。
ルートから指定してみる
Windowsでも、パス指定の際の基準はカレントディレクトリになりました。
でも、フルパスを指定したなら、それはフルパスとして解釈されます。
間違っても、**<カレントディレクトリ><フルパス>** みたいな解釈はされません。
Linuxでもそうなるでしょうか? Linuxにおけるルートは / になります。
次は、デバッグ引数に / を指定して、実行してみます。
無事に最後まで実行できています。
また、**/** はGetFullPathでも / として認識されています。
きちんとルートディレクトリの内容と比較してみます。
同じ内容であることがわかります。
Conclusion
少しずつ基本的なAPIを使えるようになってきました。
Windows/Mac/Linuxでの挙動の違いを比較してみたいですね。