フォルダがファイルになってしまったときの対処方法

●注意●
 ここで示す操作は上級者向けのものです。初心者向けではありません。ここで書かれた内容を理解できない場合は、絶対に操作しないでください。間違えると取り返しのつかない結果になる恐れがあります。



●ファイルとフォルダ
 chkdskユーティリティを使った後などに、本来フォルダ (ディレクトリ) であったものがファイルになってしまうことがあります (画面1)。こうなるとそのフォルダに存在したファイルやサブフォルダにアクセス不能となります。このようなトラブルはNTFSファイルシステムではめったに起きず、主にFAT16/32ファイルシステムで起きます。また、ごく稀に、逆のトラブル、つまり本来ファイルであったものがフォルダとして認識されてしまうというトラブルもあります (画面2)。こうなるとそのファイルのデータが利用できなくなります。

画面1:本来フォルダであったものがファイルとして認識された例


画面2:本来ファイルであったものがフォルダとして認識された例

 ファイルシステム上からはフォルダもファイルの一種です。ただ "ディレクトリ" という属性を持った特殊なファイルという扱いです。ファイルとしての内容はそのフォルダに存在するファイルとサブフォルダに関する情報です。この属性フィールドになにかの理由で間違った値が書き込まれると、フォルダであったものがファイルになったり、ファイルであったものがフォルダになるというトラブルになります。

●修復方法
 このトラブルを解決するには、間違った属性フィールドを正しい値に書き換えてやればよいことになります。ただし、属性フィールドに間違った値が書き込まれたということは、属性フィールド以外のフィールドにも間違った値が書き込まれている可能性がありますので、単純に属性フィールドを書き換えただけでは、元通りに修復できるとは限りません。運がよければ修復できる位に考えておくと良いでしょう。
 NTFSやVista SP1以降でサポートされるexFATの場合は、こうしたトラブルが起きる可能性が非常に低いことと、修復が非常に難しいことから、ここではファイルシステムがFAT16/32の場合に限り修復方法を説明します。

1) Disk Probeを起動して、「Drives」メニューから「Logical Volume」をクリックします。
2) 「Logical Volumes」欄で、問題となっているファイル/フォルダのあるドライブ名をダブルクリックし、「Handle 0」の「Read Only」のチェックを外し、「Set Active」ボタンをクリックし、「OK」ボタンをクリックします。
3) 「Tools」メニューから「Search Sectors」をクリックします。
4) 画面3のように、「Exhaustive search」と「Ignore case」にチェックを付け、「Enter characters to search for」欄に修復したいフォルダ/ファイルのファイル名先頭6文字までを入力し (例えば "test" というようにフォルダ/ファイル名が6文字以内ならそのまま、"test_folder" というようにフォルダ/ファイル名が6文字を超えている場合は先頭からの6文字だけの "test_f" を入力します。"." および拡張子は入力しません)、「Search」ボタンをクリックします。

画面3:Disk ProbeのSearch Sectors画面

5) 「Found match in Sector xxxxxx Press Yes to continue search」というメッセージが表示されたら、"xxxxxx" の部分をメモして、「はい」ボタンをクリックします。再度「Found match in Sector xxxxxx....」と表示されたら、やはり "xxxxxx" の部分をメモして、「はい」ボタンをクリックして、検索を続けます。これを続けて、「Searched xxxxxxxx sectors String not found」が表示されたなら「OK」をクリックして検索を終了します。
6) 「Sectors」メニューから「Read」をクリックします。
7) 「Starting Sector」欄に、5) でメモした最初のセクタ値を入力して「Read」ボタンをクリックします。
8) 開かれたセクタ画面が、ディレクトリエントリの画面であるか確認します。もしディレクトリエントリの画面と違うようであれば、7) の画面で、5) でメモした次のセクタ値を入力します。ディレクトリエントリの画面が見つかるまで、これを繰り返します。
 実は、ここが今回の作業で一番難しく、面倒なところです。長く使っているHDDであるほど、また問題のフォルダ/ファイル名がことさらユニークなものでない限り、大量のセクタが検索で見つかるはずです。しかし、書き換えを行うべきセクタはその中の1つだけです。書き換えを行うべきディレクトリエントリの画面とは、画面4 (FAT32、ロングファイル名なし)、あるいは画面5 (FAT16、ロングファイル名あり) のようなものです。

画面4:FAT32、ロングファイル名なしの場合のディレクトリエントリ


画面5:FAT16、ロングファイル名ありの場合のディレクトリエントリ

 1つのディレクトリエントリは画面の2行分、32バイトを占めます。最初の11バイトが8.3形式のファイル名と拡張子になります。8+3に満たない場合はスペース (バイナリの "20") で埋められます。その後の12バイト目 (画面で反転しているところ) が属性フィールドです。ここが "1x" または "3x" の場合はフォルダを、"0x" または "2x" の場合はファイルを意味します。まったく他の属性を持たないフォルダは "10" になり、他の属性を持たないファイルは "00" になります。また読み取り専用のファイルなら "01"、隠しファイルなら "02"、システムファイファイルは "04"、アーカイブ属性のファイルなら "20" といった具合に、"x" の部分は変わってきます。複数の属性を持つ場合は、その合計になります。例えば、読み取り専用、隠しファイル、システムファイファイルそしてアーカイブ属性のファイルであれば、"27" になります。フォルダについても同様です。
9) この属性フィールドの値を、本来フォルダであったものがファイルとして認識されているのであれば、"0x" または "2x" から "1x" または "3x" に書き換え、本来ファイルであったものがフォルダとして認識されているのであれば、"1x" または "3x" から "0x" または "2x" に書き換えます。
10) 「Sectors」メニューから「Write」をクリックします。
11) 「Starting sector to write data」はそのままで「Write it」ボタンをクリックします。
12) 確認のメッセージ「Are you sure......」が表示されたら、「はい」をクリックします。
13) Disk Probeを終了し、Windowsを再起動します。問題のフォルダ/ファイルが修正されているかを確認します。

画面6:ファイルとして認識されてしまった画面1のフォルダを修復した結果、無事にフォルダに戻った。

●日本語ファイル名/フォルダ名の場合
 ファイル名/フォルダ名が日本語の場合ちょっと厄介です。というのはDisk Probeが日本語に対応していないため、日本語を表示できません。ただし、検索の際に文字列を日本語で入力することはできます (上記4)の操作)。Disk Probeは単にその日本語文字コードを検索します。しかし検索した結果の画面では日本語が表示されず、バイナリの文字コードが表示されるだけですので、どこが修正すべきディレクトりエントリかわかりにくくなっています。
 FAT16/32の場合は、日本語文字コードにはシフトJISが使われますので、日本語ファイル名/フォルダ名の場合は、文字コード表であらかじめそのシフトJISの文字コードを調べておき、その文字コードでDisk Probeの画面を確認します。