168

ファイルが選択された状態で、エクスプローラーでフォルダーを開こうとしています。

次のコードは、ファイルが見つからないという例外を生成します。

System.Diagnostics.Process.Start(
    "explorer.exe /select," 
    + listView1.SelectedItems[0].SubItems[1].Text + "\\" 
    + listView1.SelectedItems[0].Text);

このコマンドを C# で実行するにはどうすればよいですか?

4

11 に答える 11

370
// suppose that we have a test.txt at E:\
string filePath = @"E:\test.txt";
if (!File.Exists(filePath))
{
    return;
}

// combine the arguments together
// it doesn't matter if there is a space after ','
string argument = "/select, \"" + filePath +"\"";

System.Diagnostics.Process.Start("explorer.exe", argument);
于 2009-03-30T06:09:57.400 に答える
47

この方法を使用してください:

Process.Start(String, String)

最初の引数はアプリケーション(explorer.exe)であり、2番目のメソッド引数は実行するアプリケーションの引数です。

例えば:

CMDで:

explorer.exe -p

C#で:

Process.Start("explorer.exe", "-p")
于 2008-12-02T16:46:29.723 に答える
43

パスにコンマが含まれている場合、Process.Start(ProcessStartInfo) を使用すると、パスを引用符で囲むことができます。

ただし、 Process.Start(string, string) を使用する場合は機能しません。Process.Start(string, string) が実際に引数内の引用符を削除するようです。

これは私にとってうまくいく簡単な例です。

string p = @"C:\tmp\this path contains spaces, and,commas\target.txt";
string args = string.Format("/e, /select, \"{0}\"", p);

ProcessStartInfo info = new ProcessStartInfo();
info.FileName = "explorer";
info.Arguments = args;
Process.Start(info);
于 2012-03-28T09:38:45.323 に答える
31

ファイル名にスペースが含まれている場合、つまり「c:\ My File contains Spaces.txt」の場合、ファイル名を引用符で囲む必要があります。そうでない場合、エクスプローラーは他の単語が異なる引数であると見なします...

string argument = "/select, \"" + filePath +"\"";
于 2010-10-03T23:05:36.990 に答える
21

奇妙なことに、引数Process.Startで onを使用すると、長さが 120 文字未満のパスに対してのみ機能します。explorer.exe/select

すべてのケースで動作させるには、ネイティブの Windows メソッドを使用する必要がありました。

[DllImport("shell32.dll", SetLastError = true)]
public static extern int SHOpenFolderAndSelectItems(IntPtr pidlFolder, uint cidl, [In, MarshalAs(UnmanagedType.LPArray)] IntPtr[] apidl, uint dwFlags);

[DllImport("shell32.dll", SetLastError = true)]
public static extern void SHParseDisplayName([MarshalAs(UnmanagedType.LPWStr)] string name, IntPtr bindingContext, [Out] out IntPtr pidl, uint sfgaoIn, [Out] out uint psfgaoOut);

public static void OpenFolderAndSelectItem(string folderPath, string file)
{
    IntPtr nativeFolder;
    uint psfgaoOut;
    SHParseDisplayName(folderPath, IntPtr.Zero, out nativeFolder, 0, out psfgaoOut);

    if (nativeFolder == IntPtr.Zero)
    {
        // Log error, can't find folder
        return;
    }

    IntPtr nativeFile;
    SHParseDisplayName(Path.Combine(folderPath, file), IntPtr.Zero, out nativeFile, 0, out psfgaoOut);

    IntPtr[] fileArray;
    if (nativeFile == IntPtr.Zero)
    {
        // Open the folder without the file selected if we can't find the file
        fileArray = new IntPtr[0];
    }
    else
    {
        fileArray = new IntPtr[] { nativeFile };
    }

    SHOpenFolderAndSelectItems(nativeFolder, (uint)fileArray.Length, fileArray, 0);

    Marshal.FreeCoTaskMem(nativeFolder);
    if (nativeFile != IntPtr.Zero)
    {
        Marshal.FreeCoTaskMem(nativeFile);
    }
}
于 2016-09-10T15:08:39.387 に答える
18

サミュエル・ヤンの答えは私をつまずかせました、これが私の3セントの価値です.

Adrian Hum の言うとおりです。ファイル名を必ず引用符で囲んでください。zourtney が指摘したようにスペースを処理できないからではなく、ファイル名のコンマ (および場合によっては他の文字) を個別の引数として認識するためです。したがって、Adrian Hum が提案したように見えるはずです。

string argument = "/select, \"" + filePath +"\"";
于 2012-01-30T05:41:29.587 に答える
14

「/select,c:\file.txt」を使用します

/selectの後にスペースではなくコンマが必要であることに注意してください。

于 2009-02-13T06:28:52.560 に答える
9

ファイルが見つからない理由として最も考えられるのは、パスにスペースが含まれていることです。たとえば、「explorer /select,c:\space space\space.txt」は見つかりません。

パスの前後に二重引用符を追加するだけです。

explorer /select,"c:\space space\space.txt"

またはC#で同じことを行います

System.Diagnostics.Process.Start("explorer.exe","/select,\"c:\space space\space.txt\"");
于 2017-11-08T14:55:03.427 に答える
6

Startメソッドの2番目のパラメーターに、渡す引数( "/ select etc")を入れる必要があります。

于 2008-12-02T16:46:25.577 に答える
5
string windir = Environment.GetEnvironmentVariable("windir");
if (string.IsNullOrEmpty(windir.Trim())) {
    windir = "C:\\Windows\\";
}
if (!windir.EndsWith("\\")) {
    windir += "\\";
}    

FileInfo fileToLocate = null;
fileToLocate = new FileInfo("C:\\Temp\\myfile.txt");

ProcessStartInfo pi = new ProcessStartInfo(windir + "explorer.exe");
pi.Arguments = "/select, \"" + fileToLocate.FullName + "\"";
pi.WindowStyle = ProcessWindowStyle.Normal;
pi.WorkingDirectory = windir;

//Start Process
Process.Start(pi)
于 2012-03-05T17:21:18.487 に答える