近年のWindowsにおける「ショートファイル」とは何ですか?

このQ&Aのポイント
  • 近年のWindowsにおける「ショートファイル」とは、過去のWindowsやMS-DOSとの互換性のために残された「8.3形式」のファイル名のことです。
  • ショートファイルはロングネームに対するシンボリックリンクとして実装されており、本質的にはハードリンクではありません。
  • ショートファイルを無効にすることでWindowsの高速化が期待できるという記述は誤りであり、ショートファイルは実態を伴わない単なるリンクであるため、無効化しても体感できるほどの差は起きません。
回答を見る
  • ベストアンサー

近年のWindowsにおける「ショートファイル」は本質的に何でしょうか?

近年のWindowsにおける「ショートファイル」は本質的に何でしょうか? UNIXのファイルシステムなどで使われている、inodeに対するハードリンクのようなものと捉えれば良いでしょうか? 「ショートファイル」で検索すると、過去のWindowsやMS-DOSとの互換のために残された「8.3形式」のファイル名ということはすぐに調べがつきますので、ここではワードの意味をお聞きしているのではありません。 ロングネームに対するシンボリックリンクとして実装されているのか?それともロングネームとは本質的に等価なハードリンクとして実装されているのか?どちらでもないのなら、どういった形で実装されているのか?といった専門的なことが知りたいです。 この疑問を持った経緯は、よくある「WindowsXP高速化」などを謳ったサイトで、レジストリを変更して「8.3形式」を無効にすることで高速化が期待できるような記述を目撃したからなのです。 友人はこれを信じ込んでPCにあまり明るくないにも関わらず(ないからこそ、か?)何の疑問も抱かずレジストリをいじって悦に入っているのですが、もし「ショートファイル」が実態に対するハードリンクのようなものに過ぎず、参照をカウントされているだけの単なるリンクとして存在しているのならば、これを無効にすることでWindowsが高速化するなどというのは馬鹿馬鹿しい考えだと思います。 一度しか作られない、それも実態を伴わないリンクだとすると、これを無効化したところで人間が体感など到底できるはずもない程の差しか起きえないはずです。 参考となるサイト、技術書籍などでも結構です。Windowsのファイルシステムに詳しい方、専門の方のご意見をお待ちしております。

質問者が選んだベストアンサー

  • ベストアンサー
  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.2

VFAT と NTFS に言及すれば十分でしょうか. それでよければ, いずれも「長い名前のファイル (ディレクトリ) を作るときに, それに対応する 8.3形式のファイル名も作る」という実装です. なので, 「8.3形式を無効にする」と「8.3形式のファイル名を作る」時間が節約できます. だから, 理論的には「(特にファイルを作るときに) 高速化が期待できる」ということになります. 問題はどのくらいの時間が節約できるかですが, 「そのディレクトリにどのくらいの数のファイルがあるのか」と「そのディレクトリにあるファイルの名前が (先頭部分が) どのくらい似ているのか」に依存します. ファイルがたくさんあれば当然時間がかかりますし, 似た名前のファイルがたくさんある場合には, 8.3形式として使える名前をがんばって探す必要があるのでさらに時間がかかります. ま, これで体感できるほどの時間差があるかどうかは知りませんが. 以下実装上の話になりますが, VFAT に関してはとても簡単で, 事実上「長いファイル名が 8.3形式のファイル名のエイリアス」です. ディレクトリエントリーとしては, 長いファイル名のあとに 8.3形式のエントリーが作られ, 「ファイルの属性は 8.3形式のエントリーが全て担っている」ということで「事実上」と付けてみました. NTFS は確か Microsoft が詳細を完全には出してなかったような気がするのですが, 「1つのファイルに対して複数の名前を与えることができる」という NTFS 機能をそのまま使って実装しているはずです. ただ, 名前の変更や移動に対応するため, 対応関係そのものは長いファイル名が持っているものと思われます. いずれにしても「ファイルシステム上では、ショート形式のファイル名に相当するエントリみたいなものは一切ないです。」という #1 の話は間違っています. VFAT の場合のディレクトリエントリーの例は挙げておきますね.

参考URL:
http://www.ntfs.com/fat-filenames.htm
Alexei-K
質問者

お礼

これは本当に参考になりました。専門的な解説をしていただき感謝します。 リンク先もありがとうございます。 >問題はどのくらいの時間が節約できるかですが, 「そのディレクトリにどのくらいの数のファイルがあるのか」と「そのディレクトリにあるファイルの名前が (先頭部分が) どのくらい似ているのか」に依存します. ファイルがたくさんあれば当然時間がかかりますし, 似た名前のファイルがたくさんある場合には, 8.3形式として使える名前をがんばって探す必要があるのでさらに時間がかかります. ま, これで体感できるほどの時間差があるかどうかは知りませんが. なるほど、尤もなお話です。 NTFSがファイル名などのエントリをどのように持っているのか存じませんが、ある程度固まったセクタに書き込まれているならば例え数万~数十万ファイルから新しく付けられる名前候補を探すのも(たとえHDDでも)ほんの数ミリセック単位だと思うのですが、これは考えが甘いでしょうか。 ファイルの実体のようにいろんな位置にバラバラ存在していると、HDDのシーク時間がボトルネックとなって急激にパフォーマンスが落ちそうですね。 少し突っ込んでNTFSについて勉強してみたいと思いました。 貴重なご意見に感謝いたします。

その他の回答 (1)

  • rabbit_cat
  • ベストアンサー率40% (829/2062)
回答No.1

本当の実装の詳細についてはよく知らないのですが、 少なくともショート形式はハードリンクやシンボリックリンクなんかではありません。ファイルシステム上では、ショート形式のファイル名に相当するエントリみたいなものは一切ないです。 ファイルの操作関連のAPIで、指定されたファイル名が見つからなかった場合に、通常ならエラーを返すわけですが、 ショート形式が有効になっている場合は、エラーを返す前に、指定されたファイル名をショート形式だと思って、検索しなおす、ていうルーチンが呼ばれるんでしょう。 ショート形式とロング形式の対応を記憶するテーブルみたいのがどこにあるのか、あるいは、そもそもテーブルみたいなものはなくてショート形式が必要になったらその都度その場でショート形式のファイル名を生成しているのか、といったようなことは私は知りません。

Alexei-K
質問者

補足

ご回答ありがとうございます。 >ファイルの操作関連のAPIで、指定されたファイル名が見つからなかった場合に、通常ならエラーを返すわけですが、 >ショート形式が有効になっている場合は、エラーを返す前に、指定されたファイル名をショート形式だと思って、検索しなおす、ていうルーチンが呼ばれるんでしょう。 これは rabbit_cat 様の想像でしょうか? WindowsAPIの動作としてこのような挙動をすることが書かれたMSのドキュメントなどがありましたら、大変勉強になりますのでお示しいただけますと幸いです。 これが根拠ある事実ならば、たしかに動作が軽快になる可能性はありますね。 >ショート形式とロング形式の対応を記憶するテーブルみたいのがどこにあるのか、あるいは、そもそもテーブルみたいなものはなくてショート形式が必要になったらその都度その場でショート形式のファイル名を生成しているのか、といったようなことは私は知りません。 この部分は、実際にファイルを作成してみて、コマンドプロンプトの dir /X #ショートファイルネームを表示 コマンドで確認してみました。 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem の、NtfsDisable8dot3NameCreation キーの値が 0 (default) の場合は、ファイルやディレクトリが作られた段階でショートネームも作られていました。1の場合は作られません。 ためしにファイルをmoveしてみたらショートネームも一緒に移動するようです。ショートネームが無効な環境では、ファイルのmove時にショートネームもどこかへ消えてなくなります。この点ではたしかにソフトリンクともハードリンクとも違いますね。 ファイル名の属性、といったぐらいのイメージなのだろうか。いったいどう実装されているのか知的好奇心からとても気になります。

関連するQ&A

  • ロングファイル名を 8.3形式のショートファイル名にコンバートするツー

    ロングファイル名を 8.3形式のショートファイル名にコンバートするツール(OS:Windows2000 Sp4 or Debian Linux) 済みません。あるディレクトリ配下にある大量のMIDIファイル(拡張子 .mid) を 8.3 形式のいわゆる、MS-DOS 用のファイル名(8.3 形式)にコンバートしたいのですが、そういった、ツール(ソフト、できれば、シェア・ウェアではなく、フリー・ウェアで)のホームページがあるのであれば、紹介して頂きたいのですが、可能でしょうか? OSは、Windows2000(SP4) or Debian Linux で対応できるツール(ソフト)が、いいと、思っています。宜しくお願いします。

  • windows7でのファイル名の認識

    現在のwindowsでは、ブランクを含むロングファイル名(フォルダ名)が使用できます。と同時に、従来のDOSでおなじみの8.3形式の省略形の名称も合わせて定義されています。というか、そうだと思っていました。 昨年12月に購入したWindows7のマシンを最近ようやく使い始めたのですが、8.3形式の省略形ファイル名を持っていないようなのです。dir /xで表示すると、ロングファイル名だけしか表示されません。 コマンドプロンプトから実行するようなプログラムの場合、path変数にブランクを含むロングファイル名を認識できずにエラーになります。 質問は、省略形をもつかもたないかはどこで制御されているのでしょうか?

  • MS-DOS形式のファイルをWindowsで。

    毎度ご迷惑おかけしております・・・(2回目です) ネット上からMS-DOSで動作するフリーソフトをダウンロードしたのですが、 そのフロッピをそのままPC(MS-DOS3.30?古いです)に差し込んで探しても、ファイルが見つかりませんでした。 考えてみれば、WindowsとMS-DOSではフォーマット形式が違うので、 Windows上で落としたファイルの内容は、MS-DOSでは見れないのですね。 PCのハードの中に入っているファイルを(→フロッピに保存して)、Windowsで展開したり、その逆で、Windowsで保存したファイルをMS-DOSで開いたり・・・ということは出来るのでしょうか? (ところで、調べるうちに「Windows上のMS-DOS」という言葉を耳にしたのですが、  「OSの上にOS?」ということに・・・?  ファイル形式とかはどうなっているのでしょう?)

  • ディレクトリ名をショートファイル名で知る方法は?

    こんにちは。 Windows9xなどにおいて、 C:\Program Files\TTERMPRO のように、ディレクトリ名をロングファイル名ではなく、ショートファイル名で書きたい場合というのが出てくることがあります。(バッチファイルを作成しておくなどの時) (例の場合には c:\progra~1\ttermpro になるのかも知れない) DOS窓で dir/s のような見方でファイルではわからなくもないのですが、ディレクトリを知る方法やコマンド等があればアドバイスいただきたく思っています。

  • windows10 隠しファイルを表示させない

    windows10で隠しファイルを表示させないようにしたいです。 レジストリで HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced  Hidden 1:表示する 2:表示しない で2になっているのですが、もちろんこの状態だと隠しファイルを非表示になります。ですが、フォルダのツールバーで 表示 ⇒ 隠しファイルにチェックを入れると隠しファイルが表示されてしまいます。 完全に隠しファイルを無効化にする方法・もしくは フォルダのツールバーとか非表示にできないでしょうか? 末筆で恐縮ですがお分かりの方、ご教授いただければ幸いです。

  • オープンウインドウ、ブラウザウインドウを開く

    よろしくお願いします。 FLASHファイルから別ファイルへリンクさせる際、画面のサイズ指定をしてオープンウインドウとして開くことは可能でしょうか? _blankはできましたが、できればオープンウインドウの形式でリンクさせたいと思っています。

    • ベストアンサー
    • Flash
  • ファイル名が長すぎて削除できないファイルの削除方法

    なんか間違ってwebサイトのリンク?(htm)ファイルをダウンロードしたようで、 非常に長い名前がついたhtmファイルが出来てました。 削除しようとすると「指定されたファイル名は、無効または長すぎます。」と出てきて削除できません。 検索して、グループポリシーエディタ-からロングネームに対処できるようにする方法をためそうとグループポリシーエディターをインストールして該当箇所を開こうとしましたが、最後のパスである「システム」フォルダがありませんでした。 この方法は諦め、コマンドプロンプトやパワーシェルから名前を変更する方法を試しましたが、上手く出来ませんでした。 もちろん普通に名前を変えようとしても出来ませんでした。 どうしたら削除できますか? 他に削除する方法はありませんか? よろしくお願いいたします。 Windows10 Home 1903 64bit 使用中

  • windows10でbat(レジストリ処理)したい

    windows10の高速スタートアップの機能他、電源ボタンのスリープ/ロックをレジストリで無効にしたいです。 コントロールパネル → 電源オプション → システム設定(電源ボタンの定義とパスワード保護の有効化)のシャットダウン設定の ・高速スタートアップを有効にする ・スリープ ・休止状態 ・ロック この4点をレジストリ(bat処理)で無効にしたいのです お分かりの方ご教授いただけないでしょうか? 末筆で恐縮ですがよろしくお願いします。

  • Macで読めるロングファイルネームのCD-Rを焼きたい。

    B's Recorder GOLDを使っています。 ROMEOやJULIETで焼いたロングファイルネームのファイルの 入ったCD-RをMacに読ませてみたところ、どちらも 8.3ファイルネームでしか開けませんでした。 以前、Macのライティングソフトを使っていたのですが、 このソフトの場合、MacでもWindowsでもロングファイルネームで 読めるCD-Rを焼くことが出来ました。 このようなフォーマットのCD-Rが焼けるWindows用のソフトは ないでしょうか?

  • Windows Media Player7.1の再生ファイル形式の設定について

     Windows Media Player7.1の「ツール」→「オプション」→「形式」タブで、再生ファイル形式を選択しようと「形式」タブをクリックすると、レジストリーエラーの警告が出ます。いったん、その警告ダイアログを「OK」をクリックして閉じると、次は「形式」タブを開けるのですが、本来ならそこで表示されるはずの利用可能なファイル形式の一覧がないのです。  先日Windows Media Player9にアップグレードしたのですが、他のアプリケーションとの相性が悪く、アンインストールしました。その時にレジストリの設定が完全には元に戻らなかったのかと思い、再びWindows Media Player9をインストールしたあと、アンインストールしなおしてみたのですが、やはり同じことでした。  ファイルの関連付けは、フォルダオプションからある程度はできるので、今のところ問題はないのですが、どうすればいいでしょうか?  OSはWindows98SEです。  おわかりになる方、よろしくお願いします。