フォルダーやファイルがリネームできない! ファイルを開いているプロセスを探す方法
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製のコマンドラインプログラムだ。
ファイル名の一部、プロセス名の一部から検索が可能で、必要な情報を簡単に得ることができる。ただし、対象はローカルファイルへのローカルプロセスからのアクセスのみで、リモートからのファイルアクセスを探すことはできない。
このプログラムは、プロセスがオープンしている「ハンドル」を列挙するもの。対象プロセスを停止させることはできないが、強制的にハンドルをクローズすることはできる。基本的には、このコマンドでファイルを開いてるプロセスを探し、プロセス番号(pid)を探して、該当のプロセスを停止させる。
ファイル名からの検索は、オプションなしにコマンドラインにキーワードを入れれば、そのキーワードを含むファイルを表示する。あるいは、「-p プロセス名」で実行ファイルの名前やその一部を指定することでファイルをオープンしているプロセスの中から特定のプロセスを検索できる。
ダウンロードは以下のURLから可能だ。
●Handle - Sysinternals https://learn.microsoft.com/en-us/sysinternals/downloads/handle
ローカルファイルをアクセスしている プロセスを列挙する「openfiles.exe」
続いて、openfiles.exeは、Windowsの標準コマンドである。
標準では、リモートからアクセスされているファイルのみを列挙する。実行には管理者権限が必要。開かれているファイル一覧を表示する場合には検索機能はないので、他の文字列検索コマンド(たとえば、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から搭載された機能だ。
これは、エクスプローラーの右クリックメニューとして利用し、選択したファイルやディレクトリをオープンしているプロセスを表示する。表示されたプロセスは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を再起動すれば解決はするのだが、作業中などで再起動したくない(あるいはできない)状況もある。そういう場合にこうしたツールを準備しておくと再起動せずに問題を解決できるだろう。
この記事に関連するニュース
-
WSL 2.4.4ではtar形式でのディストリビューションが配布でき、企業での利用が容易になってきた
ASCII.jp / 2024年11月24日 10時0分
-
窓辺の小石 第191回 リンクの冒険
マイナビニュース / 2024年11月8日 17時3分
-
Windows Subsystem for Linuxガイド 第41回 WSL GUI設定
マイナビニュース / 2024年11月7日 15時31分
-
テクノスタイル、CSVデータ検索アプリ「eDocFinder」を発表
@Press / 2024年10月29日 16時0分
-
「消えない8.63GB」のファイルが消えた - 阿久津良和のWindows Weekly Report
マイナビニュース / 2024年10月27日 16時0分
ランキング
-
1電気のプロが“本格的な暖房を使う前に警告”するのは…… コンセントのまさかの現象理由と対策に「そうだったのか……」「全く知らなかった!」
ねとらぼ / 2024年11月25日 19時30分
-
2スマホ料金「最激戦区の30GBプラン」を比較 ahamoショックにUQ mobileやY!mobileも追随でどこがお得に?
ITmedia Mobile / 2024年11月26日 6時5分
-
3HD-2D版『ドラクエ3』勇者「俺だけバラモス倒せなかった…」←なんで? 嘆きの声続出の理由
マグミクス / 2024年11月25日 17時25分
-
4富山の「段ボールの製造会社」の社員たちを変えたのは掃除だった – 指示待ち社員が変わった経緯を社長が明かす
マイナビニュース / 2024年11月25日 9時18分
-
5Amazonブラックフライデー、絶対誰も教えてくれないお得に買える“裏技”
ASCII.jp / 2024年11月26日 7時0分
記事ミッション中・・・
記事にリアクションする
記事ミッション中・・・
記事にリアクションする
エラーが発生しました
ページを再読み込みして
ください