変更履歴
2023年06月01日
新規作成
1 はじめに
本記事は、他のネットワークPCのリソースへアクセスする、
あるいは他のネットワークPCから自身のリソースにアクセスされるための、
Windowsシステム・ファイルパスの表記法について整理したものです。
Windowsシステムでは、PCローカルのファイルだけではなく、
他のWindowsやUNIX/Linuxなどのネットワークファイルをアクセスすることが
多々あります。
ネットワークファイルは、
「UNCパス」でファイルパスを指定してアクセスしなければなりませんが、
普段UNCパスの表記法などを気にかけるなんていうことはありません。
ですが、UNCパスの記述が原因で、
特定のアプリケーションでファイル・アクセス不能という事態が発生することがありえます。
また、ファイル名やディレクトリ名が文字化けすることもあります。
本記事では、こういった不都合を避けることを目的に、
Windowsシステムのファイルパスの表記法を整理してみました。
2 Windowsシステムにおけるファイルパスの基本形式
本章では、Windowsシステムにおけるファイルパスの基本的な表記形式を示します。
基本的な表記形式には、次の3つの形式があります。
・従来のDOSパス
・UNCパス
・DOSデバイスパス
2.1 従来のDOSパス
標準のDOSパスは、下に示す3つの要素で構成されます。
- ・ボリューム、またはドライブ文字とそれに続く「ボリューム区切り記号 ":"」
- ・ディレクトリ名
-
ディレクトリ区切り文字によって、
入れ子になっているディレクトリ階層内でサブディレクトリが分割されます。
- ・任意のファイル名
- ディレクトリ区切り文字によって、ファイルパスとファイル名が分割されます。
3つの要素がすべて存在する場合、パスは絶対パスになります
ボリュームまたはドライブ文字が指定されておらず、
ディレクトリ名がディレクトリ区切り文字で始まる場合、
パスは現在のドライブのルートからの相対パスとなります。
それ以外の場合、パスは現在のディレクトリに相対となります。
表2.1-1にDOSパスの記述例を示します。
2.2 UNCパス
Windowsにおいてネットワーク上のリソースを特定するために使用されるパスの形式を、
UNCパス(Universal Naming Convention)と言います。
ネットワーク上の共有フォルダーやプリンターなどにアクセスするために利用されます。
UNCパスは、サーバー名やホスト名、共有名、ディレクトリ名、ファイル名の順に
組み合わせられます。
- ・サーバーまたはホストの名前
-
先頭に¥¥が付きます。
サーバー名は、
NetBIOSマシン名かIP/FQDNアドレス(IPv4とv6に対応)にすることができます。
- ・共有名
-
ホスト名とは、¥で区切られます。
サーバー名と共有名を合わせてボリュームになります。
- ・ディレクトリ名
-
ディレクトリ区切り文字によって、
入れ子になっているディレクトリ階層内でサブディレクトリが分割されます。
- ・任意のファイル名
- ディレクトリ区切り文字によって、ファイルパスとファイル名が分割されます。
表2.1-2にUNCパスの記述例を示します。
2.3 DOSデバイスパス
Windowsオペレーティングシステムには、
ファイルを含む、すべてのリソースを指す統一オブジェクトモデルがあります。
これらのオブジェクトパスにはコンソールウィンドウからアクセスできます。
これらのオブジェクトパスは、
DOSとUNCのレガシーパスがマッピングされているシンボリックリンクの特別なフォルダーです。
この特別なフォルダーは、下に示すDOSデバイスパス構文で表します。
ドライブ文字でドライブを識別できるだけでなく、
ボリュームGUIDを使用してボリュームを識別できます。
DOSデバイスパスは、次の要素から構成されます。
- ・デバイス パス指定子 (¥¥.¥ か ¥¥?¥)
- この指定子により、DOSデバイスパスとしてパスが識別されます。
- ・実際のデバイスオブジェクトへのシンボリックリンク
-
デバイス パス指定子の後の最初のセグメントによって、
ドライブまたはボリュームが識別されます。
例えば、ドライブ名の場合は(C:、
ボリュームのGUIDの場合は Volume{b75e2c83-0000-0000-0000-602f00000000})
デバイスUNCの場合は、次のような形式となります。
3 パスの正規化
他のネットワークファイルをアクセスする際の、
ファイル名やディレクトリ名の文字化けやアクセス不能を避けるためには
以下に示す点にも留意したいものです。
・区切り記号や特定の文字のトリミング・ルール
・使用できない文字
・ファイル名やディレクトリ名の最大長
・文字コード
3.1 パスの正規化
Windowsシステムで処理されるパスは、ほとんどすべてが正規化されます。
パスタイプの識別や、相対パスの評価といった正規化については、
Windowsシステムの内部の処理ですので、本記事では省略します。
コンソールにおけるコマンド入力やプログラミングにおけるパスの記述が、
どのように正規化されるのかについてのみ示します。
・要素とディレクトリの区切り記号の正規化
・特定の文字のトリミング
3.1.1 要素とディレクトリの区切り記号の正規化
フォワード スラッシュ(/)は、
すべて標準のWindows区切り記号であるバック スラッシュ(¥)に変換されます
(つまり、UNIX形式で表記しても、期待通りに処理されるということです)。
フォワード スラッシュがあるとき、
最初の2つのスラッシュに続くスラッシュはすべて1つのスラッシュにまとめられます。
3.1.2 特定の文字のトリミング
下に示す状況において、一部の文字が削除されます。
- ・セグメントがシングル ピリオドで終わる場合
-
そのピリオドは削除されます。
ピリオドが3つ以上のセグメントは、正規化されません。
実際には、有効なファイル/ディレクトリ名です。
- ・パスの終わりが区切り記号ではない場合
- 後ろに続くピリオドとスペース(U+0020)は、すべて削除されます。
3.2ファイル名やディレクトリ名に使用できない文字
Windowsでは、ファイル名やディレクトリ名には、特定の文字が使用できない制約があります。
以下の文字は、一般的にファイル名やディレクトリ名に使用できません。
さらに、ファイル名やディレクトリ名の先頭や末尾にも特定の文字が使用できません。
以下にそれらの文字をリストします。
なお、ファイルシステムによってはさらなる制約がある場合があります。
NTFS、CDFS、exFAT、UDFS、FAT、FAT32などの各ファイルシステムには、
特定の異なる規則が存在する可能性があります。
3.3 ファイル名ファイルパスの最大長
一般的に、Windowsのファイル名やディレクトリ名は
最大で255文字まで使用することができます。
ただし、Windowsの設定や環境によって異なる場合もあります。
一部のファイルシステムでは、最大で244文字までしか使用できない場合があります。
ファイルパス全体の長さについては、以前のバージョンのWindowsでは制限がありました。
MAX_PATHと呼ばれる制限があり、この制限は260文字でした。
Windows 10のバージョン1607以降では、
一般的なWin32ファイルおよびディレクトリ関数からMAX_PATHの制限が削除されました。
3.4 文字コード
NTFSでは、ファイル名は主にUTF-16のUnicodeで保存されます。
対照的に、古いFAT12、FAT16、およびFAT32ファイルシステムは、
OEM文字セットを使用します。
詳細については、コードページを参照してください。
UNIX/Linux系オペレーティングシステム上で動作する
Sambaでは、通常はUTF-8というUnicodeエンコーディングを使用しています。
したがって、Sambaを介してWindowsからアクセスされる場合でも、
ファイル名やディレクトリ名はUTF-8でエンコードされる傾向があります。
ただし、Sambaの設定によっては、別の文字コードを使用することも可能です。
例えば、smb.confファイル内の”unix charset”パラメータを設定することで、
別の文字セットを指定することができます。
この場合、ファイル名やディレクトリ名の文字コードは、指定された文字セットに従います。
以上
HTMLだと、
思うように編集することは難しく、やろうすればとっても時間が掛かります。
ですので、本記事の元となっているWordで作成したPDFを
ページ最後に貼り付けました。
役に立てていただければ、うれしく思います。
このPDFファイルは、自由に配布されてもかまいません。
ただし、再配布の際には、
入手元と著者名は明らかにしてください。
なお、上のPDFファイルの内容、また本文中の記述に、
誤字や脱字、誤った内容の記述など見つかりましたら、
下に示すフォームでご連絡いただければ幸いです。