1. トップ
  2. 新着ニュース
  3. IT
  4. IT総合

フォルダーやファイルがリネームできない! ファイルを開いているプロセスを探す方法

ASCII.jp / 2022年12月4日 10時0分

フォルダーのリネームなどでエラーになることがある。原因となるプログラムが表示されることもあれば、ハッキリとしないことも

 フォルダーをリネームしようとすると、エラーが表示されることがある。フォルダー内のファイルやサブフォルダーなどを開いているプロセスがあるからだ。Windows 10/11には、ファイルやフォルダーを開いているプログラムを探すユーティリティがいくつかある。今回は、これを解説する。とりあえず、こうしたユーティリティを「ファイルオープンユーティリティ」と総称することにする。

そもそもファイルが「開かれている」状態とは?

 多くのプログラムは、ファイルを読み出して情報を得て、ファイルに書き込んで情報を保存する。プログラムからファイルを扱うとき、対象となるファイルを「オープン」する必要がある。これは、対象をOSに通知し、読み書きのアクセスを準備するための機能だ。

 このときの対象は、正確にはプログラムではなく、プログラムの実行状態であるプロセスである。1つのプログラムを複数同時に起動すると、それそれは別の「プロセス」となる。

 Windowsでは、ファイルをオープンするとき、モード、アクセス、共有といった情報を設定する。共有は、オープン中に他のプロセスからのアクセスを許すかどうかの指定である。もし、共有を許さない場合、オープンされたファイルは、他のプロセスからはアクセスできないようにOSが制限をかける。このため、ファイルがオープンされていると、ファイルを区別するパスが変わらないように、ファイルが置かれているディレクトリなどの名前を変更することができなくなる。

 Windowsでは、APIを使ってカレントディレクトリを設定できる。カレントディレクトリを使うことで、パスを絶対指定ではなく、相対指定で指定できるようになる。このとき、該当のディレクトリに制限が付き、たとえばディレクトリの名前変更や削除ができなくなる。

 もう1つ、Windowsでは、プログラムが起動されると、その実行ファイルに対して、書き込みや削除などができなくなる。

 つまり、ディレクトリやファイルの名前変更や削除、移動などでエラーが出る場合、以下の可能性がある。

・ディレクトリやサブディレクトリにあるファイルをオープンしているプロセスがある ・ディレクトリをカレントディレクトリに設定しているプロセスがある。 ・ディレクトリやサブディレクトリにあるプログラムが起動されている

 なお、俗にこうした状態を、ファイルやディレクトリが「ロック」されているということもあるが、ファイルアクセスでは「ロック」はファイル全体や一部の読み書きを禁止する機能をさす機能であるため、正確な言い方ではない。

ファイルオープンユーティリティはこれだけある

 以下の表は、ファイルやフォルダーを開いてるプロセスを探す「ファイルオープンユーティリティ」のリストだ。複数のプログラムがあるが、それぞれ一長一短。コマンドラインプログラムが2つ、GUIが3つある。ただし、GUIの3つのうち2つは、Windowsの機能で、ファイルのオープン状態を探すための専門のプログラムではない。

 結論から言えば、ローカルファイルを開いているプロセスを探すなら「Handle.exe」、LAN側からのアクセスされているファイルを探すならopenfiles.exe、または「コンピュータの管理」→「システムツール」→「共有フォルダー」(以下、共有フォルダー)である。それでは、個々のプログラムを簡単に解説する。

プロセスがオープンしている「ハンドル」を列挙するHandle.exe

 Handle.exeは、Microsoftが配布しているSysinternal製のコマンドラインプログラムだ。

Sysinternalのhandle.exeは、プロセスが開いているハンドルを列挙するもの。その中にファイルやディレクトリが含まれる。キーワード指定でファイルを検索できる

 ファイル名の一部、プロセス名の一部から検索が可能で、必要な情報を簡単に得ることができる。ただし、対象はローカルファイルへのローカルプロセスからのアクセスのみで、リモートからのファイルアクセスを探すことはできない。

 このプログラムは、プロセスがオープンしている「ハンドル」を列挙するもの。対象プロセスを停止させることはできないが、強制的にハンドルをクローズすることはできる。基本的には、このコマンドでファイルを開いてるプロセスを探し、プロセス番号(pid)を探して、該当のプロセスを停止させる。

 ファイル名からの検索は、オプションなしにコマンドラインにキーワードを入れれば、そのキーワードを含むファイルを表示する。あるいは、「-p プロセス名」で実行ファイルの名前やその一部を指定することでファイルをオープンしているプロセスの中から特定のプロセスを検索できる。

 ダウンロードは以下のURLから可能だ。

●Handle - Sysinternals  https://learn.microsoft.com/en-us/sysinternals/downloads/handle

ローカルファイルをアクセスしている プロセスを列挙する「openfiles.exe」

 続いて、openfiles.exeは、Windowsの標準コマンドである。

Windows標準装備のopenfiles.exeは、事前設定なしでは、ネットワークファイル共有でオープンされているファイルのみを表示する

 標準では、リモートからアクセスされているファイルのみを列挙する。実行には管理者権限が必要。開かれているファイル一覧を表示する場合には検索機能はないので、他の文字列検索コマンド(たとえば、PowerShellならSelect-Stringコマンド)と組み合わせて利用する。

 ローカルファイルをアクセスしているローカルプロセスを列挙するには、まず、「/local on」としてシステムフラグを設定する。ただし、有効になるのは再起動したあとだ。再起動が必要になるため、事前に準備していないと使えない可能性がある。

 事前設定はしなくても、リモートからアクセスされているファイルを列挙できるので前述のHandle.exeと使い分けするという方法もある。

 「/?」でオンラインヘルプを表示できるが、Microsoftのサイトに解説のページがある。

●openfiles  https://learn.microsoft.com/ja-jp/windows-server/administration/windows-commands/openfiles

PowerToysに含まれている「File Locksmith」

 PowerToysのFile Locksmithツールはv0.64.0から搭載された機能だ。

PowerToysのFile Locksmithは、エクスプローラーでファイルやフォルダを選択してコンテキストメニューにある「このファイルは何で使用していますか?」から起動する。File Locksmithウィンドウにファイルやフォルダを開いているプロセスが表示される

 これは、エクスプローラーの右クリックメニューとして利用し、選択したファイルやディレクトリをオープンしているプロセスを表示する。表示されたプロセスはFile Locksmithから停止させることも可能だ。ただし、すべてのプスセスを正しく表示させるためには「管理者として実行」する必要がある。

 ディレクトリやファイルを指定する必要はあるが、少なくともエクスプローラーからディレクトリやファイルのリネームでエラーが出たときなどには、対象はすでに判明しており、プロセスを探して停止すれば、問題は解決できるはずだ。ただし、File Locksmithはローカルプロセスのみを検索するため、リモートからアクセスされているファイルを閉じることができない。

 また、PowerShell自体、比較的大きなツールであり、システムに常駐する。もちろん、便利なものではあるが、多数の機能を持つ常駐ツールの一機能であるということは理解しておいたほうがいいだろう。ダウンロードとインストールは、Microsoftストアから可能。ドキュメントに関しては、以下のページがある。

●Microsoft PowerToys  https://learn.microsoft.com/ja-jp/windows/powertoys/

システムツールの下にある「共有フォルダー」

 スタートメニューの「すべてのアプリ」から「Windowsツール」にある「コンピュータの管理」を開いたとき、左側のツリーで「システムツール」の下にあるのが「共有フォルダー」機能だ。

コンピューターの管理にある「共有フォルダー」では、ファイル共有で開かれているファイルのほか、相手ホストやユーザー名、自分が公開している共有名なども表示可能だ

 ここには、「共有」(共有名の一覧)、「セッション」(接続中のホストとユーザー)、「開いているファイル」(ファイル共有で開かれているファイルの一覧)の3つのサブフォルダーがある。

 基本的には、「開いているファイル」で、該当のファイルを探し、右クリックメニューから「開いているファイルを閉じる」を選べば、アクセスが停止される。対象はリモートからのアクセスのみで、ローカルプロセスからのアクセスを調べることはできないが、GUIで操作も簡単なため、使い方を覚えておいても損はない。

リソースモニターからも実は確認が可能

 リソースモニターは、CPU時間、メモリ、ファイルアクセス、ネットワーク利用などの「リソース」の利用状況を調べるGUIユーティリティである。

リソースモニターは、ファイルオープンユーティリティではないが、プロセスごとにオープンしているファイルのリストを表示でき、プロセスの停止も可能。標準搭載機能なので、ほかに方法がないときにも利用できる

 ここで「ディスク」タブを開いて、ウィンドウ左側上部の「ディスク活動のプロセス」リストからチェックボックスを使ってプロセスを選択すると、プロセスが開いているファイルの一覧が「ディスク活動」リストに表示される。

 また、下の「ディスク活動」リストでファイルを選択すると、「ディスク活動のプロセス」で該当のプロセスが選択状態となる。検索機能はないものの、このような形で、ファイルのプロセスの対応をつけることが可能だ。プロセスを選択して右クリックメニューで「プロセスの終了」→「プロセスツリーの終了」を選べば、該当のプロセスを停止させることができる。

 ただし、ファイル名自体を検索することはできないので、目視でリストからファイルやディレクトリを探す必要がある。手軽ではあるが、基本的にはリソースの利用状態を見るためのユーティリティで、たまたまファイルとプロセスを関連付けて表示しているのであり、純粋な「ファイルオープンユーティリティ」ではない。しかし、標準搭載機能であり、インストールも不要でプロセスからオープンしているファイルを探すことができるため、他に手がないときに使えることがある。

 ローカルプロセスが開いているファイルを探すならHandle.exeが最適で、リモートファイルに関しては、「ファイル共有」あるいは、openfiles.exeを使うといいだろう。ファイル/フォルダーのエラーの場合、エクスプローラーやコンソールが開いていることが原因であることが多く、比較的わかりやすいこともあるのだが、ウィンドウは消えているのにプロセスが残っているプログラムがファイルを開いたままということもある。

 最悪わからない場合には、Windowsを再起動すれば解決はするのだが、作業中などで再起動したくない(あるいはできない)状況もある。そういう場合にこうしたツールを準備しておくと再起動せずに問題を解決できるだろう。

この記事に関連するニュース

トピックスRSS

ランキング

記事ミッション中・・・

10秒滞在

記事にリアクションする

記事ミッション中・・・

10秒滞在

記事にリアクションする

デイリー: 参加する
ウィークリー: 参加する
マンスリー: 参加する
10秒滞在

記事にリアクションする

次の記事を探す

エラーが発生しました

ページを再読み込みして
ください