C#で開発をしていると、特定のフォルダをWindowsのエクスプローラで開きたい場面が出てくることがあります。
例えばログファイルの保存先を表示したいときや、ユーザーに操作を促したいフォルダを案内するときなどです。
本記事では、C#でエクスプローラを開く基本的な方法から、ファイルを選択した状態で開く応用テクニック、注意すべきエラー対応まで詳しく解説します。
Visual Studioと.NET環境があればすぐに試せるサンプルコードも用意しているので、ぜひ参考にしてください。
Windowsのエクスプローラを開くには、System.Diagnostics.Process.Start
メソッドを使用します。
最もシンプルな例は以下の通りです。
using System.Diagnostics;
class Program
{
static void Main()
{
// フォルダを指定してエクスプローラを起動
Process.Start("explorer.exe", @"C:\Users\Public\Documents");
}
}
このコードは C:\Users\Public\Documents
をエクスプローラで開きます。
指定するパスにはフォルダでもファイルでもOKです。実行するとWindowsのエクスプローラがその場所を開きます。
特定のファイルをユーザーに強調したいときは、選択された状態で開くと便利です。以下のように /select,
オプションを使います。
using System.Diagnostics;
class Program
{
static void Main()
{
// ファイルを選択状態で開く
string filePath = @"C:\Users\Public\Documents\sample.txt";
Process.Start("explorer.exe", $"/select,\"{filePath}\"");
}
}
この形式では、Explorerがそのファイルをハイライトした状態でフォルダを表示してくれます。
パスの空白対策のため、パスは "
で囲む必要があります。
近年の.NET(特に.NET Core以降)では、セキュリティの観点から Process.Start()
の使用に制限がある場合があります。
また、パスが間違っていると例外が発生します。
try
{
string folderPath = @"C:\Invalid\Path";
Process.Start("explorer.exe", folderPath);
}
catch (System.ComponentModel.Win32Exception ex)
{
Console.WriteLine("エクスプローラの起動に失敗しました: " + ex.Message);
}
このように、Win32Exception
で例外を捕捉しておくと、万が一の時もアプリが落ちるのを防げます。
ユーザーに対してエラーメッセージを表示するなどの対処も可能です。
.NET Coreや.NET 5以降では、UseShellExecute
プロパティを明示的に指定する必要があります。
この設定がないと、エクスプローラが正常に起動しない場合があります。
using System.Diagnostics;
class Program
{
static void Main()
{
var psi = new ProcessStartInfo
{
FileName = "explorer.exe",
Arguments = @"C:\Users\Public\Documents",
UseShellExecute = true
};
Process.Start(psi);
}
}
このように、ProcessStartInfo
を使うことで、より柔軟な設定が可能になります。
特にクロスプラットフォームではない処理を書くときには、こういった明示的な書き方が推奨されます。
ローカルのパスだけでなく、ネットワークドライブ(UNCパス)も開くことが可能です。
以下はNAS上の共有フォルダを開く例です。
csharpコピーする編集するProcess.Start("explorer.exe", @"\\192.168.0.10\SharedFolder");
この形式も特に問題なく動作します。
ただし、ネットワーク環境や認証の設定によってはアクセスエラーになることもあるため、事前に確認しておきましょう。
Process.Start()
を複数回使えば、複数のフォルダを連続して開くこともできます。
Process.Start("explorer.exe", @"C:\Users\Public\Documents");
Process.Start("explorer.exe", @"D:\Work\Projects");
ただし、ユーザーにとってはウィンドウが増えて煩雑になる可能性があるので、実装前に目的を明確にしておきましょう。
エクスプローラを開くだけでなく、そこに「これを確認してください」などのメッセージを表示したい場合は、MessageBox.Show()
などでメッセージを先に表示してから、エクスプローラを開くのが効果的です。
using System.Windows.Forms;
class Program
{
[STAThread]
static void Main()
{
MessageBox.Show("ログファイルをご確認ください。", "ご案内", MessageBoxButtons.OK, MessageBoxIcon.Information);
Process.Start("explorer.exe", @"C:\Logs");
}
}
これにより、ユーザーはなぜそのフォルダが開いたのかを直感的に理解できるようになります。
C#からエクスプローラを開く方法は非常にシンプルで、Process.Start()
を使えば簡単に実現できます。
以下のポイントを押さえておくと、より実用的なアプリ開発に役立ちます。
"explorer.exe"
とパスを指定/select,
を使えばファイルを選択状態で表示できるUseShellExecute = true
を忘れずに業務アプリや個人ツールなど、さまざまな場面でこのテクニックは役に立つはずです。ぜひ実装に取り入れてみてください。