如何在Windows资源管理器中打开文件夹?

本文关键字:文件夹 资源管理器 Windows | 更新日期: 2023-09-27 18:11:05

我不需要任何类型的接口。我只需要该程序是一个.exe文件,打开一个目录(如。F:) .

在c#中我将使用什么样的模板?有没有比Visual Studio更好的工具?一个完全不同的过程会更好吗?

如何在Windows资源管理器中打开文件夹?

C#中您可以这样做:

Process.Start(@"c:'users'");

当文件夹不存在时,这一行将抛出Win32Exception。如果您使用Process.Start("explorer.exe", @"C:'folder'");,它将打开另一个文件夹(如果您指定的文件夹不存在)。

所以如果你想在文件夹存在时只打开,你应该这样做:

try
{
    Process.Start(@"c:'users22222'");
}
catch (Win32Exception win32Exception)
{
    //The system cannot find the file specified...
    Console.WriteLine(win32Exception.Message);
}

创建批处理文件,例如open.bat

写这行

%SystemRoot%'explorer.exe "folder path"

如果你真的想用c#

  class Program
{
    static void Main(string[] args)
    {
        Process.Start("explorer.exe", @"C:'...");
    }
 }

使用ShellExecuteEx API和SHELLEXECUTEINFO中记录的explore谓词。

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]
public struct SHELLEXECUTEINFO
{
    public int cbSize;
    public uint fMask;
    public IntPtr hwnd;
    [MarshalAs(UnmanagedType.LPTStr)]
    public string lpVerb;
    [MarshalAs(UnmanagedType.LPTStr)]
    public string lpFile;
    [MarshalAs(UnmanagedType.LPTStr)]
    public string lpParameters;
    [MarshalAs(UnmanagedType.LPTStr)]
    public string lpDirectory;
    public int nShow;
    public IntPtr hInstApp;
    public IntPtr lpIDList;
    [MarshalAs(UnmanagedType.LPTStr)]
    public string lpClass;
    public IntPtr hkeyClass;
    public uint dwHotKey;
    public IntPtr hIcon;
    public IntPtr hProcess;
}
[DllImport("shell32.dll", CharSet = CharSet.Auto, SetLastError = true)]
static extern bool ShellExecuteEx(ref SHELLEXECUTEINFO lpExecInfo);
private const int SW_SHOW = 5;
public static bool OpenFolderInExplorer(string folder)
{
    var info = new SHELLEXECUTEINFO();
    info.cbSize = Marshal.SizeOf<SHELLEXECUTEINFO>();
    info.lpVerb = "explore";
    info.nShow = SW_SHOW;
    info.lpFile = folder;
    return ShellExecuteEx(ref info);
}

Process.Start("explorer.exe", folder);这样的代码实际上是在说"将命令字符串explorer.exe [folder]扔到shell的命令解释器中,并期待最好的结果"。如果shell决定Microsoft的Windows资源管理器是应该运行的程序,并且它按照您的想法解析(可能未转义的)folder参数,那么这可能会在指定的文件夹中打开一个资源管理器窗口。

简而言之,带有explore动词的ShellExecuteEx被记录为您想要做的事情,而以参数开始的explorer.exe恰好有相同的结果,在最终用户系统上的一堆假设为真的条件下。

希望您正在寻找FolderBrowserDialog,如果是这样,以下代码将帮助您:

string folderPath = "";
FolderBrowserDialog folderBrowserDialog1 = new FolderBrowserDialog();
if (folderBrowserDialog1.ShowDialog() == DialogResult.OK)
{
    folderPath = folderBrowserDialog1.SelectedPath ;
}

或者如果你想通过代码打开我的电脑,那么下面的选项将会帮助你:

string myComputerPath = Environment.GetFolderPath(Environment.SpecialFolder.MyComputer);
System.Diagnostics.Process.Start("explorer", myComputerPath);
相关文章: