ファイル操作、フォルダ操作ときて今回で第3回目
「ファイルパスの操作」
この記事では、開発チームに所属している際に扱っていたファイルパスに関する操作を紹介していきたいと思います。
そもそもファイルパスの操作ってなに?
ここで、私が言っているファイルパスとはファイルのある場所を示している住所のようなものを指しています。
このファイルパス取得したり、自分のパスより上のパスを取得したり、相対パスから絶対パスを取得したりすることを
「ファイルパスの操作」
と呼んでいます。
これはファイル操作とフォルダ操作と合わせて使うことが多いので、自然にできるぐらいにマスターしてるとよいと思います。
相対パス
あるファイルやフォルダを基準にした相対的なファイルパスです。
..\App
絶対パス
フルパスとも呼ばれていて、目的のファイルまでのすべての道筋を表示しているもの。
C:\Program Files\App
ファイルパスの扱いをあまり知らずにやらかしてしまったこともあります。
~失敗談~
あるプロジェクトでファイルパスを完全に指定しソースにベタ書きしている状態のまま、お客様環境で動作確認したら全然動かなくてビックリしたことがあります。
単純に自分のパスを取得するようなコードを書けばよかっただけなのですが、焦ってテンパってしまったので早い段階で知っておくと良いです。
現在のファイルパスの取得方(絶対パスの取得)
自分のアプリケーション(拡張子がExeのファイルのある場所)を取得してみましょう
string path; try { path = System.Environment.CurrentDirectory; } catch(Exception ex) { }
現在の階層より上の階層のファイルパスの取得
現在の階層より上の階層を取得したい場合はこちら
string levelUp = ""; string path = "C:\Program Files\dotnet"; // サンプルファイルパス try { // C:\Program Filesを取得できます。 levelUp = path.Substring(0, path.LastIndexOf(@"\")); } catch (Exception e) { }
出力は、「C:\Program Files」というように取得できます。
相対パスから絶対パスの取得方法
相対パスをもう一度振り返ってみましょう
相対パス
あるファイルやフォルダを基準にした相対的なファイルパスです。
..\App
それと条件として
・現在のディレクトリは、「C:\Program Files\dotnet」
・相対パスは「.\」
このコードで絶対パス(C:\Program Files\dotnet)を取得できます。
try { string relativePath = System.IO.Path.GetFullPath(".\\"); } catch (Exception ex) { }
複数の文字列を 1 つのパスに結合する方法
try { string sampleA = System.IO.Path.Combine(@"C:\Program Files\dotnet", "test"); } catch (Exception ex) { }
出力は、「C:\Program Files\dotnet\test」というように結合できます。
このSystem.IO.Path.Combineは、引数を4つまで文字列を入れられます。
今回の記事では、このSystem.IO.Path.Combineを使用しましたが
ある程度コーディングになれてきたら、このSystem.IO.Path.Combineと同じ機能ぐらいだったら自分で作ってみてもいいのかなと思います。
まとめ
以上でファイルパスについては終了です。
今回の記事の内容は、C#でプロジェクトを作成するにあたって結構な頻度で使うので、ぜひ参考にしてみてください。