有没有办法将文件夹浏览器对话框的初始目录设置为非特殊文件夹?这就是我目前正在使用的
fdbLocation.RootFolder = Environment.SpecialFolder.Desktop;
但是我想使用我存储在字符串中的路径fdbLocation.RootFolder = myFolder;
这导致错误“无法将'字符串'转换为' System.Environment.SpecialFolder'”。
答案 0 :(得分:171)
在调用ShowDialog之前设置SelectedPath属性。
fdbLocation.SelectedPath = myFolder;
答案 1 :(得分:27)
在调用ShowDialog ...
之前设置SelectedPath属性folderBrowserDialog1.SelectedPath = @"c:\temp\";
folderBrowserDialog1.ShowDialog();
将在C:\ Temp
启动它们答案 2 :(得分:24)
fldrDialog.SelectedPath = Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory)
“如果在显示对话框之前设置了SelectedPath属性,则具有此路径的文件夹将是所选文件夹,只要SelectedPath设置为RootFolder的子文件夹的绝对路径(或更准确地说,指向由RootFolder表示的shell命名空间的子文件夹。“
“GetFolderPath方法返回与此枚举关联的位置。这些文件夹的位置在不同的操作系统上可以具有不同的值,用户可以更改某些位置,并且位置已本地化。”
Re:桌面与DesktopDirectory
<强>桌面强>
“逻辑桌面而不是物理文件系统位置。”
<强> DesktopDirectory:强>
“用于物理的目录 在桌面上存储文件对象。做 不要混淆这个目录 桌面文件夹本身,这是一个 虚拟文件夹。“
答案 3 :(得分:9)
设置目录选择路径并检索新目录:
dlgBrowseForLogDirectory.SelectedPath = m_LogDirectory;
if (dlgBrowseForLogDirectory.ShowDialog() == DialogResult.OK)
{
txtLogDirectory.Text = dlgBrowseForLogDirectory.SelectedPath;
}
答案 4 :(得分:0)
通过反射,它可以工作并设置真正的RootFolder!
using System;
using System.Reflection;
using System.Windows.Forms;
namespace YourNamespace
{
public class RootFolderBrowserDialog
{
#region Public Properties
/// <summary>
/// The description of the dialog.
/// </summary>
public string Description { get; set; } = "Chose folder...";
/// <summary>
/// The ROOT path!
/// </summary>
public string RootPath { get; set; } = "";
/// <summary>
/// The SelectedPath. Here is no initialization possible.
/// </summary>
public string SelectedPath { get; private set; } = "";
#endregion Public Properties
#region Public Methods
/// <summary>
/// Shows the dialog...
/// </summary>
/// <returns>OK, if the user selected a folder or Cancel, if no folder is selected.</returns>
public DialogResult ShowDialog()
{
var shellType = Type.GetTypeFromProgID("Shell.Application");
var shell = Activator.CreateInstance(shellType);
var folder = shellType.InvokeMember(
"BrowseForFolder", BindingFlags.InvokeMethod, null,
shell, new object[] { 0, Description, 0, RootPath, });
if (folder is null)
{
return DialogResult.Cancel;
}
else
{
var folderSelf = folder.GetType().InvokeMember(
"Self", BindingFlags.GetProperty, null,
folder, null);
SelectedPath = folderSelf.GetType().InvokeMember(
"Path", BindingFlags.GetProperty, null,
folderSelf, null) as string;
// maybe ensure that SelectedPath is set
return DialogResult.OK;
}
}
#endregion Public Methods
}
}
答案 5 :(得分:0)
就我而言,这是一次意外的两次转义。
这有效:
SelectedPath = @"C:\Program Files\My Company\My product";
这不是:
SelectedPath = @"C:\\Program Files\\My Company\\My product";
答案 6 :(得分:0)
这很简单,你不需要反思。您必须将 SelectedPath 属性设置为所需的文件夹,但是,因为 SelectedPath 之前仅设置为作为 RootFolder 子文件夹的绝对路径,因此您必须设置 RootFolder。例如:
您的初始文件夹是桌面子文件夹:
dlgBrowseForLogDirectory.RootFolder = Environment.SpecialFolder.DesktopDirectory;
dlgBrowseForLogDirectory.SelectedPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory), "yourDesktopFolder");
您的初始文件夹是一个普通文件夹(我的电脑子文件夹也是如此):
dlgBrowseForLogDirectory.RootFolder = Environment.SpecialFolder.MyComputer;
dlgBrowseForLogDirectory.SelectedPath = @"e:\yourFolder";
有很好的编码, 克劳迪奥