2020年09月22日
川俣晶の縁側ソフトウェアC# コーディング How Tototal 1179 count

【入門級】ファイルのフルパスを示す文字列の作り方

Written By: 川俣 晶連絡先

フルパスが欲しい §

 WindowsのドキュメントフォルダにmySpecialDocument.txtというファイルが存在することが分かっています。

 そして、都合上、このファイルのファイル名を示すフルパスの文字列が必要だとします。

 どうすれば作成できるでしょう。

 WindowsのドキュメントフォルダはEnvironment.GetFolderPath(Environment.SpecialFolder.MyDocuments);で取得できます。

やり方は複数ある §

 第1のやり方が円記号(バックスラッシュ)を挟んで文字列の合体です。

 しかし、お勧めはしません。円記号(バックスラッシュ)の利用はWindowsのファイルシステムのローカルルールだからです。.NET 5の時代、あなたが作ったプログラムはLinuxやMacで使われる可能性もあります。

 第2のやり方は記号を直接書かず、Path.DirectorySeparatorCharを使う方法です。これはちょっと好ましいやり方です。少なくとも特定の記号はソース上に出現しません。

 しかし、サンプルソースを見ると分かる通り長くなりすぎです。それに、今後出現するかもしれない特殊なルールには対応仕切れないかも知れません。

 第3のやり方はPath.Combineメソッドの利用です。これはお勧めです。第1のやり方よりは長いとは言え、第2のやり方に比べれば大幅にコンパクトに記述できます。しかも、完全にパスの区切りがどういう構造化がCombineメソッド内に抽象化されており、ソース上に出て来ません。どんな環境でも動作する可能性が高い方法です。

 第3のやり方、Path.Combineメソッドの利用が最もお勧めです。

罠の数々 §

  • "a\b"と"c\d"をPath.Combineメソッドで連結すると"a\b/c\d"のような変なパスができることがある。パスの区切り記号はできるだけ直接書かないようにしたい
  • とはいえ、その場で走らせるだけの使い捨てプログラムなら難しいことは考えなくてもいい。パスを直接書いてもたいてい問題はない。最終完成形のプログラムが特定のパス区切り文字に依存していなければ良いのだ

参考リンク §

Environment クラス

Path.DirectorySeparatorChar フィールド

Path.Combine メソッド

 Path.Combine メソッドはとても便利である。引数にいくつ文字列を書いても良く、それらを全て連結したパスの文字列を作ってくれる。しかし、上記のリンクを見ると引数4個のバリエーションまでしか書かれていない。どうして、引数が5個でも動作するのだろうか。上記のリンクを辿って理由を調べてみよう。

リポジトリ §

https://github.com/autumn009/cshowto

path §

using System;

using System.IO;

class Program

{

    static void Main()

    {

        var docPath = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);

        var filename = "mySpecialDocument.txt";

        // 好ましくない方法

        var path1 = docPath + "\\" + filename;

        Console.WriteLine($"path1 = {path1}");

        // ちょっと好ましい方法

        var path2 = docPath + Path.DirectorySeparatorChar + filename;

        Console.WriteLine($"path2 = {path2}");

        // 好ましい方法

        var path3 = Path.Combine(docPath, filename);

        Console.WriteLine($"path3 = {path3}");

    }

}

実行結果 (C:\Users\autumn.PDTOKYO4の部分は実行する環境次第で変化する)

path1 = C:\Users\autumn.PDTOKYO4\Documents\mySpecialDocument.txt

path2 = C:\Users\autumn.PDTOKYO4\Documents\mySpecialDocument.txt

path3 = C:\Users\autumn.PDTOKYO4\Documents\mySpecialDocument.txt

Facebook

COOL C# CREW

C#ハウツー連載の解説増量、カラーのソース、新規書き下ろし追加の読みやすい単行本はこちら。

C#ハウツー: 逆引き入門・こんな機能はどう書くの?
キーワード【 川俣晶の縁側ソフトウェアC# コーディング How To
【C# コーディング How To】の次のコンテンツ
2020年
09月
23日
【入門級】文字列配列からファイルのパスを生成
3days 0 count
total 1025 count
【C# コーディング How To】の前のコンテンツ
2020年
09月
21日
【入門級】XOR演算子の出番
3days 0 count
total 943 count

このコンテンツを書いた川俣 晶へメッセージを送る

[メッセージ送信フォームを利用する]

メッセージ送信フォームを利用することで、川俣 晶に対してメッセージを送ることができます。

この機能は、100%確実に川俣 晶へメッセージを伝達するものではなく、また、確実に川俣 晶よりの返事を得られるものではないことにご注意ください。

このコンテンツへトラックバックするためのURL

https://mag.autumn.org/tb.aspx/20200922085104
サイトの表紙【C# コーディング How To】の表紙【C# コーディング How To】のコンテンツ全リスト 【C# コーディング How To】の入手全リスト 【C# コーディング How To】のRSS1.0形式の情報このサイトの全キーワードリスト 印刷用ページ

管理者: 川俣 晶連絡先

Powered by MagSite2 Version 0.36 (Alpha-Test) Copyright (c) 2004-2021 Pie Dey.Co.,Ltd.