フルパスを調べる

カレントディレクトリとディレクトリ名(ファイル名)からフルパスを調べます。
シェルやファイラーを作成するときに必要となる知識です。

前田稔(Maeda Minoru)の超初心者のプログラム入門

プログラムの説明

  1. プログラムでテストした「カレントディレクトリとファイル名」の組み合わせです。
    最初にカレントディレクトリで指定されたフォルダーにカレントを設定します。
    次にファイル名で指定されたフルパスを求めます。
    単純に「カレントディレクトリとファイル名」を結合すればフルパスが求まるとは限りません。
    "c:\\Windows\\system32" と ".." では、"c:\\Windows\\system32" の親(c:\\Windows)になります。
    また "c:\\TMP\\ソース\\表" と "..\\.." では、"c:\\TMP\\ソース\\表" の親の親(c:\TMP)になります。
    またディレクトリ名に空白や '\' が使われているときは要注意です。
    カレントディレクトリファイル名フルパスの結果
    "c:\\" "TMP" "c:\TMP"
    "c:\\" "TMP\\a.txt" "c:\TMP\a.txt"
    "c:\\" "Windows\\system32" "c:\Windows\system32"
    "c:\\Program Files\\Microsoft Visual Studio" "VC98\Lib" "c:\Program Files\Microsoft Visual Studio\VC98\Lib"
    "c:\\Windows\\system32" "..\\desktop.ini" "c:\Windows\desktop.ini"
    "c:\\Windows\\system32" "..\\.." "c:\"
    "c:\\TMP\\ソース\\表" ".." "c:\TMP\ソース"
    "c:\\TMP\\ソース\\表" "..\\.." "c:\TMP"
    "C:\\Documents and Settings\\maeda" "デスクトップ" "C:\Documents and Settings\maeda\デスクトップ"
  2. ユニコードを使っている場合は問題ないのですが、シフトJIS を使っている場合は次のような問題が発生します。
    日本語では一般的にディレクトリの区切り文字として \(5C) を使いますが、全角文字の中に 5C を含む文字があります。
    次の例はほんの一部で、調べればもっと出てくるでしょう。
    文字 16進数
    \ 5C
    835C
    955C
    次のディレクトリ名を見て下さい。
    本来は親の名前を「c:\TMP\ソース」としなければならないのに「表」の \ を区切コードと判断する間違いを犯すことがあります。
    c:\TMP\ソース\表
    この処理は結構面倒で、全角/半角を判断しながら \ を調べなければなりません。
    GetFullPathName() を使うと、この問題を解決してくれます。
  3. プログラムは、全ソースコードからリンクしています。

超初心者の方のために全ソースコードを掲載します。 (^_^;)
全ソースコード

超初心者のプログラム入門(Win32API C++)