やっぱり、ぐだぐだ進行だな。

その後は、「コミック わたしたちの田村くん 1巻 (ISBN:4840237034)」をぐりぐりも読んで、とらどら4!との合同キャンペーンに応募すべく葉書を書いたり。このコミック、最初の方は何か微妙気な感じだったが、回を重ねるごとにこなれてるんだかどうだか、良い感じになってる。番外編の伊欧とかやばいね!


http://msdn2.microsoft.com/en-us/library/aa365247.aspx
を読むついでに、ざっくり適当に翻訳メモ。一部意味不明だが察しろよ! まぁ、肝心なところが意味不明だから困る。

ファイルの命名

たとえお互いのファイルシステムディレクトリ又はファイルの名前の個々のコンポーネントの形成について明確なルールを持っていても、全てのファイルシステムは幾つかの一般的な規則(ベースのファイル名と拡張子はピリオドで区切られている等)にしたがっている。
例えば、MS-DOSのFATファイルシステムはベースのファイル名8文字と拡張子3文字をサポートしている。これは8.3ファイル名として知られている。FATファイルシステム及びNTFSファイルシステムはロングファイル名をサポートしているので、8.3ファイル名に限られない。

命名規則

下記の規則はアプリケーションがファイルシステムにかかわらず有効なファイル名とディレクトリ名の作成と処理を可能にする。

  • ディレクトリ名またはファイル名の拡張子からベースのファイル名を区切るにはピリオド(.)を使用する。
  • パスから互いに一つのディレクトリまたはファイル名を分けるパスの、コンポーネントを区切るにはバックスラッシュ(\)を使用する。ファイル名やディレクトリ名にバックスラッシュは使えない。但し、それらはボリューム名(例えば "C:\" )の一部に必要とされる。UNC名は以下の書式でなければならない。\\\
  • 0から31の範囲の文字かファイルシステムで許可されていない文字を除き、名前には現在のコードページの文字(Unicodeの文字を含む)を使用する。名前には拡張文字セット(128-255)を含めることができる。但し、以下の予約された文字は含められない。< > : " / \ |
  • カレントディレクトリを表すパスのディレクトコンポーネントにはピリオド(.)を使用する。
  • カレントディレクトリの親を表すパスのディレクトコンポーネントには2連続のピリオド(..)を使用する。
  • ファイルの名前に以下の予約されたデバイス名を使わない。CON, PRN, AUX, NUL, COM1, COM2, COM3, COM4, COM5, COM6, COM7, COM8, COM9, LPT1, LPT2, LPT3, LPT4, LPT5, LPT6, LPT7, LPT8, LPT9。これらのデバイス名を拡張子に続けることも避ける。(例えば NUL.tx7 )
  • 大文字と小文字の区別を仮定しない。例えばOSCAR, Oscar, oscarのような名前が同じである事を考慮する。
  • ファイルまたはディレクトリの名前はスペースまたはピリオドで終えない。たとえ基本的なファイルシステムがそう云う名前をサポートしていても、オペレーティングシステムはサポートしない。名前はピリオドで始めることができる。
最大パス長

Windows APIでは、パスの最大長は260文字とMAX_PATHで定義されている。パスは以下の順に構成される。ドライブレター, コロン, バックスラッシュ, バックスラッシュで区切られたコンポーネント, ヌル終端文字。例えば、Dドライブで最長のパスは D:\<256文字>NUL である。
いくつかの関数のUnicode版は長さが255文字以下のコンポーネントからなる概ね32,000文字の最大パス長を許可する。パスの種類を明示するには、"\\?\"プレフィックスを使用する。

    • ノート: 32,000文字は概算である。なぜなら"\\?\"プレフィックスはより長い文字列に拡張することができ、その拡張は全長に適用される。

例えば、"\\?\D:\"。UNCパスを明示するには、"\\?\UNC\"プレフィックスを使用する。例えば、"\\?\UNC\\"。これらのプレフィックスはパス自体の一部には使用されない。それらはフォワードスラッシュでパスの区切りを表したり、ピリオドでカレントディレクトリを表すことができないことを意味し、最小限度の変更でパスがシステムを通過するだろうことを示す。また、"\\?\"プレフィックス相対パスで使用できない。相対パスはMAX_PATHの文字数に制限される。 APIを使用してディレクトリを作成する時、明確なパスは8.3ファイル名をつけないことができないほど長くできない。 シェル及びファイルシステムは異なる条件があるかもしれない。APIでシェルUIが扱えないパスが作成されることはあり得る。

相対パス

ファイルを扱う関数の為に、ファイル名はカレントディレクトリから相対的にできる。ファイル名はカレントディレクトリから相対的ならば次のいずれかから始められない。

  • ディスク指定子(ドライブレターとコロン、またはサーバ名と共有名(\\servername\sharename)のどちらか。)
  • ディレクトリ名の区切り文字、例えばバックスラッシュ。(\subdir)

もしファイル名がディスク指定子及びバックスラッシュで始まるなら、それはフルパスである(例えば、c:\tmp)。もしファイル名がディスク指定子のみで始まるなら、それはレターで指定されたドライブのカレントディレクトリからの相対パスである(例えば、c:tmp.txt はCドライブのカレントディレクトリのファイルを参照する)。

ショートファイル名及びロングファイル名

普通、Windowsはパフォーマンスを理由に無効にできる特別なディレクトリエントリとして、ディスクにロングファイル名を格納する。ロングファイル名を作成した時、Windowsは短いMS-DOS(8.3)形式の名前も作成する。多くのファイルシステムで、短いファイル名はチルダ(~)を含んでいる。もっとも、全てのファイルシステムはこの規則に従っていない。従って、この仮定をしてはいけない。
MS-DOSファイル名、ロングファイル名またはファイルのフルパスを取得する為に、以下のことができる。

  • ロングファイル名からMS-DOSファイル名を取得するには、GetShortPathName関数を使用する。
  • ショート名からロングファイル名を取得すするには、GetLongPathName関数を使用する。
  • ファイルのフルパスを取得するには、GetFullPathName関数を使用する。

WindowsUnicodeでディスクにロングファイル名で格納する。たとえ拡張文字を含んでいても、本来のロングファイル名は常に維持されることを意味し、コードページにかかわらずディスクへ読み込みまたは書き込みの処理がされる。ファイル名の大文字小文字は維持されるが、ファイルシステムは大文字と小文字を区別しない。
ロングファイル名で有効な文字セットは、NTFSファイルシステムで代替ファイルストリームを開くのに使うコロン(':')を除いたUnicodeファイルシステム文字セットで、どんなファイル名の情報も失うことなくNTFSファイルシステムとFATファイシステムのパーティション間でファイルをコピーすることができる。