我使用FolderBrowserDialog的fb.SelectedPath函数遇到问题。 一切都很好,只要绝对路径不包含任何“。”。
例如:
try
{
if (arg == 1)
fb_dialog.SelectedPath = Path.GetFullPath(tb_path.Text);
else
fb_dialog.SelectedPath = Path.GetFullPath(Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location));
}
catch { fb_dialog.RootFolder = System.Environment.SpecialFolder.MyComputer; }
如果System.Reflection.Assembly.GetExecutingAssembly()。Location不包含任何“。”,则会将用户导航到该文件夹。让我们说道路是这样的:“C:\ Prog” 但是如果它返回带有“。”的路径。在其中,如“C:\ Prog.Test”,它将无法正常工作。它打开对话框,不返回任何错误,但卡在文件开发者的“根”(如果指定,否则为“桌面”)。
任何想法如何解决这个问题?因为它很烦人。
感谢您的帮助。
更新:在此帖子中由keyboardP解决:click me
答案 0 :(得分:7)
Path.GetDirectoryName
不知道您是否提供了带有点的文件夹或带扩展名的文件(例如,file.txt是文本文件还是文件夹?)。
如果您知道它是一个目录,那么解决方法可能是做这样的事情。
Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location + "\\")
这可以确保GetDirectoryName
知道它正在查看目录而不是文件,因为尾随\
。
根据评论更新了答案
此问题似乎FolderBrowserDialog
具体(上述信息在其他情况下应该有效)。我能够重现你的问题,我设法找到一个相对hacky的解决方法,但它似乎是FolderBrowserDialog
的错误,所以这应该足够了。
如果将RootFolder
属性设置为包含您正在输入的路径的属性,则可以正常工作。例如,如果您将RootFolder
设置为SpecialFolders.MyDocuments
并且输入为C:\...\My Documents\test.dot.folder
,那么它应该可以正常工作。因此,变通方法遍历SpecialFolders
枚举并设置第一个匹配项。
using (FolderBrowserDialog fbd = new FolderBrowserDialog())
{
fbd.SelectedPath = Path.GetFullPath(Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location));
//find closest SpecialFolder that matches the input (can be expanded to not be case-sensitive)
foreach (var sf in Enum.GetValues(typeof(Environment.SpecialFolder)))
{
string spath = Environment.GetFolderPath((Environment.SpecialFolder)sf);
if (fbd.SelectedPath.Contains(spath))
{
fbd.RootFolder = (Environment.SpecialFolder)sf;
break;
}
}
fbd.ShowDialog();
}