NTFS ファイル システム上のファイルまたはフォルダを削除できない

Windows XP のサポートは終了しました

マイクロソフトでは、2014 年 4 月 8 日に Windows XP のサポートを終了しました。この変更は、ソフトウェアの更新プログラムおよびセキュリティ オプションに影響しています。 この変更の意味および保護された状態を維持する方法について説明します。

Windows Server 2003 のサポートは 2015 年 7 月 14 日で終了しています

Windows Server 2003 のサポートは 2015 年 7 月 14 日で終了しています。この変更は、ソフトウェアの更新プログラムおよびセキュリティ オプションに影響します。 この変更の意味および保護された状態を維持する方法について説明します。

はじめに
NTFS ファイル システムを使用するボリュームでファイルまたはフォルダを削除できない場合があります。この資料では、その原因と、原因に応じた問題の解決方法について説明します。
詳細
: NTFS の内部では、フォルダは特殊な種類のファイルとして扱われます。そのため、この資料で使用する "ファイル" という語は、ファイルまたはフォルダのいずれかを指します。

原因 1 : ファイルが ACL を使用している

ファイルにアクセス制御リスト (ACL) が使用されていると、ファイルを削除できない場合があります。この問題を解決するには、ファイルのアクセス許可を変更します。アクセス許可を変更するには、ファイルの所有権の取得が必要な場合があります。

管理者は、ファイルに対するアクセス許可を明示的に付与されていない場合でも、暗黙的にすべてのファイルの所有権を取得することができます。ファイルの所有者は、ファイルに対するアクセス許可を明示的に付与されていない場合でも、暗黙的にファイルのアクセス許可を変更することができます。そのため場合によっては、ファイルの所有権を取得してから自分自身に対してファイルを削除するアクセス許可を付与して、ファイルを削除する必要があります。

ファイルに非正規のアクセス制御リスト (ACL) があるため、セキュリティ ツールによっては使用できないものがあり、アクセス許可の表示または変更を行うことができない

この問題を回避するには、他のツールを使用します (新しいビルドの Cacls.exe など)。

ACL のアクセス制御エントリ (ACE) には、その種類によって特定の優先順があります。たとえば、アクセスを拒否する ACE は一般的に、アクセスを付与する ACE より優先されます。しかし、任意の順序の ACE を持つ ACL がプログラムによって記述される可能性もあります。Windows の初期のバージョンでは、これらの "非正規のアクセス制御リスト (ACL)" を Windows が読み込むときに問題が発生することがありました。状況によっては、これらの ACL をエクスプローラのグラフィカル セキュリティ エディタを使用して修正できない場合があります。この問題は、新しいバージョンの Windows では修正されています。この問題が発生した場合には、最新版の Cacls.exe を使用します。ACL を適切に表示または編集することはできなくても、ファイルへのアクセスを許可する新規の ACL を記述することができます。

原因 2 : ファイルが使用中である

ファイルが使用中の場合には、ファイルを削除できないことがあります。この問題を解決するには、オープン ハンドルを持つプロセスを特定し、そのプロセスを終了します。

ファイルの開かれ方によっては (たとえば、共有アクセスではなく排他アクセスで開かれているとき)、使用中のファイルを削除できない場合があります。ファイルのオープン ハンドルを持つプロセスは、さまざまなツールを使用して、必要に応じて特定できます。

ファイルに対してオープン ハンドルを持つプロセスを特定する際に役立つツールの関連情報を参照するには、以下の「サポート技術情報」 (Microsoft Knowledge Base) をクリックしてください。
242131 [HOWTO] ファイルを開いているプロセス一覧の表示方法
172710 [NT] リソース キットの OH.exe ユーティリティの使用方法
この問題の現象はさまざまです。Delete コマンドを使用して、ファイルを削除できる場合もありますが、実際には、そのファイルを開いているプロセスがファイルを解放するまで削除されません。また、削除が保留になっているファイルに関しては、[<ファイル名> のプロパティ] ダイアログ ボックスの [セキュリティ] タブにアクセスできない場合があります。この問題を解決するには、オープン ハンドルを持つプロセスを特定し、そのプロセスを終了します。

原因 3 : ファイル システムが壊れているため、ファイルにアクセスできない

ファイル システムが壊れていると、ファイルを削除できない場合があります。この問題を解決するには、ディスク ボリュームで Chkdsk ユーティリティを実行し、エラーを修正します。

ディスクの不良セクタ、ハードウェアの故障、またはソフトウェアの不具合が原因で、ファイル システムが破損し、ファイルが問題のある状態になっている場合があります。このような場合、一般的な操作がさまざまな理由で失敗します。ファイル システムで破損が検出されると、イベント ログにイベントが出力され、通常は Chkdsk の実行を要求するメッセージが表示されます。Chkdsk を実行してデータを回復できるかできないかは、破損の性質によります。しかし、Chkdsk を実行すると、内部的には一貫性の保たれた状態に戻ります。

Chkdsk ユーティリティの使用の関連情報を参照するには、以下の「サポート技術情報」 (Microsoft Knowledge Base) をクリックしてください。
176646 [NT] エラー メッセージ : ファイルまたはディレクトリが破壊 …
187941 CHKDSK とその新しいスイッチ /C および /I について

原因 4 : ファイル パスの長さが MAX_PATH の文字制限を超えている

ファイル パスに問題があると、ファイルの表示、編集、または削除を行うことができない場合があります。

解決方法 1 : 自動生成の 8.3 形式の名前を使用してファイルにアクセスする

この問題を解決するために、ファイルへのアクセスに自動生成の 8.3 形式の名前を使用することができます。フォルダ名が長すぎるためにパスが長くなっている場合には、この解決方法が最も簡単な場合があります。8.3 形式のパスでも長すぎる場合、または 8.3 形式の名前がボリュームで無効にされている場合には、「解決方法 2」に進みます。

NTFS ボリュームで 8.3 形式のファイル名を無効にする方法の関連情報を参照するには、以下の「サポート技術情報」 (Microsoft Knowledge Base) をクリックしてください。
121007 NTFS パーティションで 8.3 形式の名前の作成を無効にする方法

解決方法 2 : 長いフォルダ名を変更するか、フォルダを移動する

フォルダの名前を変更して、MAX_PATH よりも長いパスになる対象ファイルがないようにします。この操作を行う場合には、ルート フォルダ (または、他の適切な場所) で開始し、その後に下層のフォルダの名前を変更して名前を短くします。この手順で問題が解決しない場合 (たとえば、ファイルが 128 個のフォルダより深い場所にある) には、解決方法 4 に進みます。

解決方法 3 : パスの構造内にあるフォルダにドライブをマップする

対象ファイルまたは対象フォルダのパス構造内に含まれるフォルダにドライブをマップします。この方法により、仮想パスの長さが短くなります。

たとえば、次のような構造のパスがあるとします。
\\ServerName\SubfolderName1\SubfolderName2\SubfolderName3\SubfolderName4\...
このパスでは、合計文字数が 255 文字を超えます。ドライブを SubfolderName4 にマップすると、このパスが 73 文字に短縮されます。

解決方法 4 : フォルダと同じ深さのネットワーク共有を使用する

「解決方法 1」、「解決方法 2」、または「解決方法 3」では不都合な場合、またはこれらの方法で問題が解決されない場合には、フォルダ ツリーのできるだけ深い場所にネットワーク共有を作成し、その共有にアクセスして、フォルダの名前を変更します。

解決方法 5 : ツールを使用して、深いパスをスキャンする

Windows プログラムの多くでは、パスの最大長が 255 文字未満であると想定されています。そのため、これらのプログラムではこの標準的なパスを格納するだけの内部記憶域しか割り当てられていません。NTFS にはこの制限がなく、これより長いパスでも格納することができます。

この問題は、既に深い階層にあるフォルダ構造内に共有を作成し、その下層に共有を使用してさらに深い構造を作成する場合に発生することがあります。フォルダ ツリーに対してローカルでのみ機能するツールの中には、ルートから始まるツリー全体をスキャンできないものがあります。これらのツールで共有をスキャンできるようにするためには、特別な方法が必要な場合があります (CreateFile API に関する資料では、このような状況でツリー全体をスキャンできる方法について説明されています)。

通常の場合、ファイルは、そのファイルを作成したソフトウェアを使用して管理することができます。使用しているプログラムが MAX_PATH よりも深い場所にファイルを作成することのできるものであれば、そのプログラムを使用して、ファイルの削除または管理を行うことができます。通常は、同じ共有を使用して、共有上に作成されたファイルを削除することができます。

原因 5 : ファイルに Win32 名前空間で予約された名前が含まれている

ファイル名に Win32 名前空間で予約された名前 ("lpt1" など) が含まれていると、ファイルを削除できない場合があります。この問題を解決するには、Win32 プログラム以外のプログラムを使用して、ファイルの名前を変更します。使用できるツールには、適切な内部構文を使用してファイルを処理する POSIX ツールなどがあります。

また、特定の構文を使用してファイルへのパスを指定する場合、組み込みのコマンドを使用して、標準の Win32 で予約された名前のチェックを回避することもできます。たとえば、Windows XP で Del コマンドを使用する場合、以下の特別な構文を使用してファイルへの完全なパスを指定すれば、"lpt1" という名前のファイルを削除することができます。
del \\?\c:\path_to_file\lpt1
Windows NT および Windows 2000 で予約された名前のファイルを削除する方法の関連情報を参照するには、以下の「サポート技術情報」 (Microsoft Knowledge Base) をクリックしてください。
120716 Windows NT で予約された名前のファイルを削除する方法
Windows XP で予約された名前のファイルを削除する方法の関連情報を参照するには、以下の「サポート技術情報」 (Microsoft Knowledge Base) をクリックしてください。
315226 Windows XP で予約されている名前の付いたファイルを削除する方法
標準の Win32 の CreateFile 機構を使用して、ファイルへのハンドルを開くと、特定のファイル名が古いスタイルの DOS デバイスに予約されます。下位互換性のために、これらのファイル名は許可されておらず、標準の Win32 ファイル呼び出しを使用して作成することはできません。ただし、この問題は NTFS の制限ではありません。

Win32 プログラムを使用して、MAX_PATH よりも深いフォルダをスキャンする際に使用する方法と同じ方法を使用することで、ファイルが作成 (または削除) されるときに行われる標準の名前のチェックを回避できる場合があります。また、POSIX ツールの中には、これらの名前のチェックの対象にならないものもあります。

原因 6 : ファイル名に Win32 名前空間では無効な名前が含まれている

ファイル名に無効な名前が含まれる場合 (ファイル名の末尾に空白やピリオドが含まれる場合やファイル名が空白のみで構成されている場合) には、ファイルを削除することができない場合があります。この問題を解決するには、適切な内部構文を使用するツールを使用してファイルを削除します。以下のような "\\?\" 構文を特定のツールと一緒に使用して、これらのファイルを操作することもできます。
del "\\?\c:\path_to_file_that contains a trailing space.txt "
この問題の原因は、「原因 4」に似ています。しかし、標準の Win32 構文を使用して、名前の末尾に空白やピリオドのあるファイルを開くと、実際のファイルが開く前に、末尾の空白やピリオドは削除されます。そのため、同じフォルダに "AFile.txt" と "AFile.txt " (ファイル名の末尾に空白が 1 つあることに注意してください) という名前の 2 つのファイルがある場合に、標準の Win32 呼び出しを使用して 2 番目のファイルを開くと、代わりに 1 番目のファイルが開かれます。同様に、単に " " (空白文字が 1 つ) という名前のファイルがあり、標準の Win32 呼び出しを使用してこのファイルを開くと、代わりにそのファイルの親フォルダが開かれます。この状況でこれらのファイルのセキュリティ設定を変更すると、変更が行えないか、意図しない他のファイルの設定を変更してしまう場合があります。この現象が発生すると、実際には制限された ACL を持つファイルへのアクセス許可を持つように見える場合があります。

複数の原因の組み合わせ

状況によっては、これらの原因の組み合わせにより、ファイルの削除手順が複雑になる場合があります。たとえば、コンピュータの管理者としてログオンする場合、「原因 1」 (ファイルを削除するアクセス許可がない) と「原因 6」 (ファイル名の末尾の文字により、ファイルへのアクセスが他のファイルまたは存在しないファイルにリダイレクトされる) の組み合わせのために、ファイルを削除できないことがあります。このため、ファイルの所有権を取得し、アクセス許可を追加して「原因 1」を解決しても、「原因 6」のために、ユーザー インターフェイスの ACL エディタが適切なファイルにアクセスできず、ファイルを依然として削除できないことがあります。

この状況では、Subinacl ユーティリティを /onlyfile スイッチと共に使用して、修正しなければアクセスできないファイルの所有権とアクセス許可を変更することができます (このユーティリティは Resource Kit に含まれています)。たとえば、以下のようなコマンドを使用します。
subinacl /onlyfile "\\?\c:\path_to_problem_file" /setowner=domain\administrator /grant=domain\administrator=F
: このコマンドは、ここでは読みやすいように改行されていますが、実際には 1 行のコマンド ラインです。

このサンプルのコマンド ラインを実行すると、末尾に空白のある C:\path_to_problem_file ファイルが修正され、domain\administrator アカウントがファイルの所有者になり、ファイルに対してフル コントロールのアクセス許可を持つようになります。これで、Del コマンドで同じ "\\?\" 構文を使用して、このファイルを削除することができます。
関連情報
関連情報を参照するには、以下の「サポート技術情報」 (Microsoft Knowledge Base) をクリックしてください。
319368 マウントされたドライブからフォルダを削除しようとすると "アクセスできません" というエラー メッセージが表示される
プロパティ

文書番号:320081 - 最終更新日: 12/03/2007 07:22:00 - リビジョン: 7.3

Microsoft Windows 2000 Server, Microsoft Windows 2000 Advanced Server, Microsoft Windows 2000 Professional, Microsoft Windows 2000 Datacenter Server, Microsoft Windows XP Home Edition, Microsoft Windows XP Professional, Microsoft Windows Advanced Server, Limited Edition, Microsoft Windows Datacenter Server Limited Edition, Microsoft Windows Server 2003, 64-Bit Datacenter Edition, Microsoft Windows Server 2003, Enterprise x64 Edition, Microsoft Windows Server 2003, Datacenter Edition (32-bit x86), Microsoft Windows Server 2003, Enterprise Edition (32-bit x86), Microsoft Windows Server 2003, Standard Edition (32-bit x86), Microsoft Windows Server 2003, Web Edition, Microsoft Windows Small Business Server 2003 Premium Edition, Microsoft Windows Small Business Server 2003 Standard Edition

  • kbinfo kbfilesystems KB320081
フィードバック