C#winforms上的FolderBrowser对话框
我正在winform中使用folderBrowserDialog 我需要默认路径或初始路径作为网络位置 例如:C#winforms上的FolderBrowser对话框,c#,.net,winforms,folderbrowserdialog,C#,.net,Winforms,Folderbrowserdialog,我正在winform中使用folderBrowserDialog 我需要默认路径或初始路径作为网络位置 例如: folderBrowserDialog1.SelectedPath = @"\\server1\foo\bar\"; 这是行不通的。我的系统位于正确的网络上,我可以通过浏览器访问目录并运行命令 这是一个非功能?还是有工作要做? 如果有人能指引我走过,我将不胜感激 谢谢, 当您使用\\name约定访问网络资源时,IvarWindows会进行临时映射。我不确定是否有一个条款可以以简洁的方
folderBrowserDialog1.SelectedPath = @"\\server1\foo\bar\";
这是行不通的。我的系统位于正确的网络上,我可以通过浏览器访问目录并运行命令
这是一个非功能?还是有工作要做?
如果有人能指引我走过,我将不胜感激
谢谢,
当您使用
\\name
约定访问网络资源时,IvarWindows会进行临时映射。我不确定是否有一个条款可以以简洁的方式从.net应用程序中执行同样的操作。您可能希望先将驱动器映射到一个字母,然后使用@“Z:\foo\bar\”
访问它,但显然,如果您的应用程序以阻止它的方式部署,则映射驱动器可能不是您想要做的事。以我的经验,.NET总是被UNC路径击中或错过。有时有效,有时无效。我相信这是一个很好的解释,但在早期,我搜索了又搜索,没有找到答案
我没有处理这个问题,而是采取了这样的策略:最好自己映射一个驱动器,然后在代码中断开连接。(如果你找到了答案,我很想知道为什么会这样,但因为我有一个可行的解决方案,我自己也不太在意去研究。)它对我们100%的时间都有效,而且非常简单。我创建了一个这样做的类,因为这在我们的商店里是一个很常见的任务
我不知道你是否愿意接受这个想法,但如果你感兴趣,并且还没有代码,我们的例程粘贴在下面。检查一个打开的驱动器号,然后映射它,然后在完成后断开连接,这将是相当简单的
public static class NetworkDrives
{
public static bool MapDrive(string DriveLetter, string Path, string Username, string Password)
{
bool ReturnValue = false;
if(System.IO.Directory.Exists(DriveLetter + ":\\"))
{
DisconnectDrive(DriveLetter);
}
System.Diagnostics.Process p = new System.Diagnostics.Process();
p.StartInfo.UseShellExecute = false;
p.StartInfo.CreateNoWindow = true;
p.StartInfo.RedirectStandardError = true;
p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.FileName = "net.exe";
p.StartInfo.Arguments = " use " + DriveLetter + ": " + Path + " " + Password + " /user:" + Username;
p.Start();
p.WaitForExit();
string ErrorMessage = p.StandardError.ReadToEnd();
string OuputMessage = p.StandardOutput.ReadToEnd();
if (ErrorMessage.Length > 0)
{
throw new Exception("Error:" + ErrorMessage);
}
else
{
ReturnValue = true;
}
return ReturnValue;
}
public static bool DisconnectDrive(string DriveLetter)
{
bool ReturnValue = false;
System.Diagnostics.Process p = new System.Diagnostics.Process();
p.StartInfo.UseShellExecute = false;
p.StartInfo.CreateNoWindow = true;
p.StartInfo.RedirectStandardError = true;
p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.FileName = "net.exe";
p.StartInfo.Arguments = " use " + DriveLetter + ": /DELETE";
p.Start();
p.WaitForExit();
string ErrorMessage = p.StandardError.ReadToEnd();
string OuputMessage = p.StandardOutput.ReadToEnd();
if (ErrorMessage.Length > 0)
{
throw new Exception("Error:" + ErrorMessage);
}
else
{
ReturnValue = true;
}
return ReturnValue;
}
}
当您单步执行代码时,是否会抛出任何(有趣的)异常?我在我的计算机(WinXP SP3,Visual C#Express 2008)上对此进行了测试,它工作正常。你能提供更多关于失败的细节吗?你在尝试时看到了什么?您使用的是哪个操作系统和C#?@cristobalito:这不会引发任何异常,它只会进入基本文件夹(“我的电脑”)视图@sidewinderguy:同样的掐!我在Win XP SP3上使用Visual C#Professional Edition 2008…那么ShowDialog是否默认打开网络位置?天哪,我讨厌文件夹浏览器对话框/是的,因为我的应用程序本身是从网络驱动器运行的……我不能假设用户有一个映射的驱动器号……而且弄清楚映射的驱动器号也会很痛苦!:(嘿,大卫,谢谢你的解决方案。我最后做了类似的事情。我迭代了所有映射的驱动器,并试图找到reqd文件夹。但我真的很喜欢你的解决方案,因为它可以连接和断开网络驱动器。你介意我重用你的代码吗?-IvarPlease do…我不在这里发布任何专有的东西。