FolderBrowserDialog 设置根目录为桌面 RootFolder = Environment.SpecialFolder.Desktop; SelectedPath = string.Empty 未生效
时间: 2024-03-13 18:44:28 浏览: 128
如果 `FolderBrowserDialog` 的 `RootFolder` 属性设置为 `Environment.SpecialFolder.Desktop`,并且 `SelectedPath` 属性设置为 `string.Empty`,但是未能生效,可能是因为您的应用程序没有足够的权限来访问桌面文件夹。
您可以尝试使用管理员权限来启动您的应用程序,或者将您的应用程序移动到一个不受限制的文件夹中,例如 `C:\Users\Public`。
如果这些方法都无法解决问题,您可以尝试使用 Windows API 来打开文件夹对话框,例如 `SHBrowseForFolder` 函数。这样可以确保您的应用程序可以访问桌面文件夹。以下是一个使用 `SHBrowseForFolder` 函数的示例:
```csharp
using System.Runtime.InteropServices;
public static class FolderBrowserDialogEx
{
[DllImport("shell32.dll")]
private static extern IntPtr SHBrowseForFolder(ref BROWSEINFO lpbi);
[DllImport("shell32.dll", CharSet = CharSet.Unicode)]
private static extern bool SHGetPathFromIDList(IntPtr pidl, IntPtr pszPath);
[StructLayout(LayoutKind.Sequential)]
private struct BROWSEINFO
{
public IntPtr hwndOwner;
public IntPtr pidlRoot;
public IntPtr pszDisplayName;
public string lpszTitle;
public uint ulFlags;
public IntPtr lpfn;
public IntPtr lParam;
public int iImage;
}
public static string ShowDialog()
{
BROWSEINFO bi = new BROWSEINFO();
bi.hwndOwner = IntPtr.Zero;
bi.pidlRoot = IntPtr.Zero;
bi.lpszTitle = "请选择文件夹";
bi.ulFlags = 0x00000040; // BIF_USENEWUI
IntPtr pidl = SHBrowseForFolder(ref bi);
if (pidl != IntPtr.Zero)
{
StringBuilder path = new StringBuilder(260);
if (SHGetPathFromIDList(pidl, path))
{
return path.ToString();
}
}
return string.Empty;
}
}
```
您可以使用以下代码调用 `FolderBrowserDialogEx.ShowDialog` 方法来显示文件夹对话框:
```csharp
string selectedPath = FolderBrowserDialogEx.ShowDialog();
```
这将显示一个文件夹对话框,允许用户选择文件夹,并返回所选文件夹的路径。
阅读全文