【问题标题】:How do I open the "My Documents" and "My Computer" folders from C#?如何从 C# 打开“我的文档”和“我的电脑”文件夹?
【发布时间】:2023-03-06 04:01:01
【问题描述】:

我使用两个 GUID 打开文件夹 我的电脑 和 我的文档。

Process.Start("iexplore.exe", "::{20d04fe0-3aea-1069-a2d8-08002b30309d}");
Process.Start("iexplore.exe", "::{450d8fba-ad25-11d0-98a8-0800361b1103}");

但它会打开 Internet Explorer,然后打开文件夹我的电脑和我的文档。

【问题讨论】:

  • 您应该将此 guid 包装成具有有意义名称的 const。这可以为您和/或您的同事节省大量时间。
  • @arbiter 这是一个非常好的建议,它会让维护代码的任何开发人员更加友好。
  • 请使用硬编码的 guid 撤销答案。

标签: c# shortcut


【解决方案1】:

使用那些硬编码的 Guid 值看起来并不是实现这一目标的最佳方式。

您可以使用Environment.GetFolderPath 函数来获取任何系统特殊文件夹的路径。它接受 Environment.SpecialFolder 枚举。

这样它会更健壮,因为你不会有任何“神奇”的硬编码值。

以下是您的使用方法:

//get the folder paths
string myComputerPath = Environment.GetFolderPath(Environment.SpecialFolder.MyComputer);
string myDocumentsPath = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
//open explorer and point it at the paths
System.Diagnostics.Process.Start("explorer", myComputerPath);
System.Diagnostics.Process.Start("explorer", myDocumentsPath);

Windows 7 用户重要提示

似乎尝试使用此代码在 Windows 7 上打开“我的电脑”会错误地导致“库”文件夹被打开。这是因为在 Windows 7 中以空路径运行资源管理器的默认行为已更改。

我已在 connect 提交了以下错误报告,如果您认为这很重要,请去投赞成票!

https://connect.microsoft.com/VisualStudio/feedback/details/757291/environment-getfolderpath-not-working-correctly-in-windows-7#details

(感谢 cmets 中的 JeremyK 指出这一点)

【讨论】:

  • 如果我在 Windows 7 上尝试这个,它不会打开我的电脑,而是通过不打算使用的库文件夹
  • @JeremyK 似乎我的电脑返回了一个空路径,这会在 Windows 7 中打开“库”而不是“我的电脑”。这似乎是由 Windows 7 中资源管理器的默认行为更改引起的错误。.Net 框架似乎在假设“我的电脑”的路径永远不会改变的情况下运行。我在这里提交了一个错误报告(到那里去投票,这样就可以解决这个问题):connect.microsoft.com/VisualStudio/feedback/details/757291/…。我已经更新了我的帖子来提及这一点。
  • 这只是偶然的。 GetFolderPath 函数只为您提供给定特殊文件夹的文件系统路径 - 如果没有文件系统路径,它会返回一个空字符串。没有关于它的错误,您只是期望合同未指定的东西。因此,您的答案不仅不比 Bronto 的答案好(它依赖于非合同行为,就像 Bronto 的答案一样),而且它不起作用 - 它仅在您的默认资源管理器文件夹为“我的电脑”时才有效。同样的事情也适用于“我的文档”,但至少通常存在于文件系统中:)
【解决方案2】:

你试过了吗:

Process.Start("explorer.exe", "::{20d04fe0-3aea-1069-a2d8-08002b30309d}");
Process.Start("explorer.exe", "::{450d8fba-ad25-11d0-98a8-0800361b1103}");

?

【讨论】:

  • 是的,iexplorer.exe 确实是 Internet Explorer,而 explorer.exe 是 Windows Explorer。
【解决方案3】:

试试 explorer.exe:

Process.Start("explorer.exe", "::{20d04fe0-3aea-1069-a2d8-08002b30309d}");
Process.Start("explorer.exe", "::{450d8fba-ad25-11d0-98a8-0800361b1103}");

【讨论】:

    【解决方案4】:

    最好还是完全跳过explorer,直接“启动”GUID:

    Process.Start("::{20d04fe0-3aea-1069-a2d8-08002b30309d}");...

    【讨论】:

    【解决方案5】:

    这不适用于我的 Vista:

    string myComputerPath = Environment.GetFolderPath(Environment.SpecialFolder.MyComputer);
    System.Diagnostics.Process.Start("explorer", myComputerPath);
    

    因为 Environment.SpecialFolder.MyComputer 返回 "" 并且 Process.Start("explorer", "") 打开我的文档。

    不过,GUID 似乎可以做到这一点:

    Process.Start("explorer.exe", "::{20d04fe0-3aea-1069-a2d8-08002b30309d}");
    

    【讨论】:

      【解决方案6】:
      System.Diagnostics.Process.Start("...");
      

      我知道它看起来很可疑,但只是运行它。它会工作的。这是我电脑的代码。我不知道我的文档应该是什么。

      【讨论】:

        【解决方案7】:

        System.Diagnostics.Process.Start("...");

        我知道它看起来很可疑,但只是运行它。它会工作的。这是我电脑的代码。我不知道我的文档应该是什么。

        在 Windows 7 上,这会打开运行可执行文件的文件夹,即“当前”文件夹。

        【讨论】:

          【解决方案8】:

          我必须打开 MyDocuments 并根据上面的 cmets 我缩小了打开资源管理器的解决方案而没有副作用:

          Process.Start("::{450d8fba-ad25-11d0-98a8-0800361b1103}");
          

          我在 Windows Server 2008 R2 上对其进行了测试。

          【讨论】:

            【解决方案9】:

            桑多斯

            只要输入

            System.Diagnostics.Process.Start(directoryPath);
            

            这很容易。试试看。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2017-06-23
              • 2021-11-13
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2017-12-03
              • 2013-01-31
              相关资源
              最近更新 更多