12

これらのファイルを含むフォルダーがあります。

alongfilename1.txt <--- created first
alongfilename3.txt <--- created second

コマンド プロンプトでDIR /xを実行すると、次の短い名前が割り当てられていることがわかります。

ALONGF~1.TXT alongfilename1.txt
ALONGF~2.TXT alongfilename3.txt

ここで、別のファイルを追加すると:

alongfilename1.txt 
alongfilename2.txt <--- created third
alongfilename3.txt

私はこれを見る:

ALONGF~1.TXT alongfilename1.txt
ALONGF~3.TXT alongfilename2.txt
ALONGF~2.TXT alongfilename3.txt

罰金。ファイルを作成した日時に応じて「〜#」を割り当てているようです。これは正しいです?

ここで、「alongfilename1.txt」を削除すると、他の 2 つのファイルは短い名前のままになります

ALONGF~3.TXT alongfilename2.txt
ALONGF~2.TXT alongfilename3.txt

その ID (この場合は ~1) が別の短縮名で使用できるようになるのはいつですか。それはありますか?

また、私のマシンのファイルの短縮名が X で、別のマシンの同じファイルの短縮名が Y である可能性はありますか? カスタム アクションが DOS ショート ネームを使用しているインストールについては、特に心配しています。

みんなありがとう。

4

5 に答える 5

9

私があなただったら、短いファイル名を生成するために使用するアルゴリズムについて一貫性を保つために、どのバージョンのファイル システム ドライバー (Microsoft であろうと、別の OS であろうと) に依存することはありません。Microsoft Fastfat および NTFS ドライバーの正確な動作は、"公式に" 文書化されていないため (多少高レベルの概要を除いて)、API コントラクトの一部ではありません。ドライバーを更新すると、今日動作するものが明日動作しなくなる可能性があります。

さらに、短い名前にチルダ文字を含める必要はまったくありません。たとえば、Raymond Chen によるこの投稿を参照してください。

MSDN ブログには、このトピックに関する情報の宝庫があります。たとえば、次のとおりです。

また、英数字のみの存在に依存しないでください。たとえば、大文字、数字、および次の文字の任意の組み合わせが有効であると述べているLinux VFAT ドライバーを見てください: $ % ' ` - @ { } ~ ! # ( ) & _ ^. NTFSはそれとの互換モードで動作します...

于 2008-11-27T15:51:40.833 に答える
6

ファイルとともに短いファイル名が作成されます。アルゴリズムは次のように機能します (通常は、moocha の返信を参照してください)。

counter = 1
stripped_filename = strip_dots(strip_non_ascii_characters(filename))
shortfn = first_6_characters(stripped_filename)
while (file_exists(shortfn + "~" + counter + "." + extension)) {
    increment counter by 1
    if more digits are added to counter, shorten shortfn by 1 
    /* e.g. if counter comes to 9 and shortf~9.txt is taken. try short~10.txt next */
}

これは、ファイルが作成されると、削除されるまで短い名前を保持することを意味します。

ファイルが削除されるとすぐに、短い名前が再び使用される可能性があります。

ファイルを別の場所に移動すると、新しい短い名前が付けられる場合があります (たとえば、c:\somefilewithlongname.txt ("c:\somefi~1.txt") を d:\stuff\somefilewithlongname.txt に移動する場合、 d:\stuff\somefileelse.txt ("d:\stuff\somefi~1.txt") があり、移動したファイルの短い名前は somefi~2.txt になります)。短い名前は、特定のマシンの特定のディレクトリ内でのみ永続的であるようです。

したがって、短いファイル名はファイルシステムによって、通常は上記の方法で生成されます。あるマシンでは c:\longfi~1.txt が「c:\longfilename.txt」であるのに対し、別のマシンでは「c:\longfish_story.txt」である可能性があるため、短いファイル名は永続的ではないと想定することをお勧めします。また、ファイルが削除されると、短い名前がすぐに再び利用可能になります。

于 2008-11-27T15:43:09.180 に答える
3

MSDOS は長い名前と短い名前の関連付けをディレクトリごとのファイルに格納していると思います。

日時に依存しません。

ファイルを新しいディレクトリに移動すると...これにより、 Piskvor によって言及されたアルゴリズムがリセットされ、再び適用されます

新しいディレクトリ (移動後) では、次のようになります。

ALONGF~1.TXT alongfilename1.txt
ALONGF~2.TXT alongfilename2.txt
ALONGF~3.TXT alongfilename3.txt

alongfilename2.txt は最初は 3 番目に作成されていますが。

于 2008-11-27T15:46:48.580 に答える
0

ファイルが Samba を実行しているネットワーク サーバーによって提供される場合、短い名前はサーバーによって生成され、予測可能なパターンに従いません。

したがって、短い名前の形式を予測できると仮定するのは安全ではありません。

    G:\>dir /x *.txt

 Directory of G:\

08/25/2009  12:34 PM             1,848 S2XYYV~1.TXT strace_output.txt
03/01/2010  05:32 PM           325,428 TEY7IH~O.TXT tomcat-dump-march-1.txt
03/11/2010  12:01 AM             5,811 DI356A~S.TXT ddmget-output.txt
01/23/2009  01:03 PM           313,880 DLA94Q~K.TXT ddm-log-fn.txt
04/20/2010  07:42 PM             7,491 A50QZP~A.TXT april-20-2010.txt
于 2011-06-24T17:32:37.300 に答える
0

このリンクは、NTFSがどのようにそれを行うかを示しています。最近のバージョンでも同じ考えだと思います。

Windows 2000 では、FAT と NTFS の両方が名前に Unicode 文字セットを使用します。これには、MS-DOS が読み取れない禁止文字がいくつか含まれています。MS-DOS で読み取り可能な短いファイル名を生成するために、Windows 2000 はこれらの文字をすべて LFN から削除し、すべてのスペースを削除します。MS-DOS で読み取り可能なファイル名にはピリオドを 1 つしか使用できないため、Windows 2000 ではファイル名から余分なピリオドもすべて削除されます。次に、Windows 2000 は必要に応じてファイル名を 6 文字に切り詰め、チルダ ( ~ ) と数字を追加します。たとえば、重複しない各ファイル名には ~1 が追加されます。重複したファイル名は ~2 で終わり、次に ~3 というようになります。ファイル名が切り捨てられた後、ファイル名拡張子は 3 文字以下に切り捨てられます。最後に、コマンドラインでファイル名を表示するとき、

于 2008-11-27T15:47:16.693 に答える