5

Windows カーネルで許可されている最長の名前の長さはどれくらいですか?

例: カーネルは構造体を使用してすべてのオブジェクト パスを保持することを知っていますUNICODE_STRING。ワイド文字列のバイト長は 内に格納されるUSHORTため、パスの最大長は 2^15 - 1 文字です。ファイル名 (パスではなく) に同様の厳しい制限はありますか? (NTFS または FAT32 が特定の制限を課すかどうかは気にしません。追加のファイル システムまたはシェルの制限がないことを前提として、カーネルで理論的に許可されている可能な限り長い名前を探しています。)

(編集:なぜこれが重要なのか疑問に思っている人は、通常、ディレクトリのトラバースはFindFirstFile/FindNextFileファイルごとに1回の呼び出しによって達成されると考えてください。 という名前の関数が与えられた場合、これは基礎となるシステムコールであり、呼び出しごとに複数のファイル名NtQueryDirectoryFileを返します。実際には、このパスの最大長制限を利用して、スタックのみをバッファーとして使用する非常に高速なディレクトリ トラバーサーを作成することが可能です. 今、私はその概念を拡張しようとしています.ファイル名。)

4

2 に答える 2

5

パスの最大長は32,767文字であり、各パスコンポーネント(ディレクトリまたはファイル)の最大長は255文字です(より正確には、GetVolumeInformation関数のlpMaximumComponentLengthパラメーターで返される値)。

これはMSDNに記載されています

于 2011-01-07T10:03:48.907 に答える
2

ああ、ファイル名が 255 文字を超えてはならないことを保証するこのページを自分で見つけました。

  • パス名の長さは 32,760 文字を超えてはなりません。
    ...
  • 各パス名コンポーネントの長さは 255 文字を超えてはなりません。

それは私が不思議に思う:

パスの長さにsを使用するのにULONG、なぜ Windowsはファイルの長さにs を使用するUSHORTのですか?!

これがなぜなのか知っている人は、投稿/コメントしてください!私はかなり興味があります。:)

于 2011-08-25T15:08:38.553 に答える