我在我的winform中使用了folderBrowserDialog。C#winforms上的folderbrowserdialog
我需要默认或初始路径为网络位置。
为如:
folderBrowserDialog1.SelectedPath = @"\\server1\foo\bar\";
这是行不通的。我的系统位于正确的网络上,我可以通过浏览器访问目录并运行命令。
这是非功能吗?还是有解决办法? 如果有人能指导我通过,我将不胜感激!
感谢, 伊瓦
我在我的winform中使用了folderBrowserDialog。C#winforms上的folderbrowserdialog
我需要默认或初始路径为网络位置。
为如:
folderBrowserDialog1.SelectedPath = @"\\server1\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;
}
}
嗨大卫,谢谢你的解决方案,我最终做了类似的事情,我遍历所有的映射驱动器,并试图找到reqd文件夹,但我真的很喜欢你的解决方案,因为它连接和断开网络驱动器如果我重新使用你的代码,你介意吗? - Ivar – 2010-08-13 22:12:59
请不要在这里发布任何专有的东西。 – David 2010-08-13 22:16:53
的Windows使一个临时映射当您访问使用\\name
约定的网络资源。我不确定是否有条款从简洁的方式从.net应用程序执行相同的操作。您可能需要先将驱动器映射到一个字母,然后使用@"Z:\foo\bar\"
访问该驱动器,但显然,如果您的应用以防止该驱动器的方式进行部署,映射驱动器可能不是您想要执行的操作。
是的,因为我的应用程序本身从网络驱动器运行...我不能假设用户有映射的驱动器号......并找出哪个盘符映射将是一个痛苦呢! :( – 2010-08-06 23:48:25
当您逐步执行代码时,是否会引发任何(有趣)异常? – cristobalito 2010-08-06 23:36:53
我在我的电脑上测试了这个(WinXP SP3,Visual C#Express 2008),它工作正常。你能否提供关于失败的更多细节当你尝试时,你看到了什么?你正在使用哪种操作系统和C#? – sidewinderguy 2010-08-06 23:41:57
@cristobalito:这不会抛出任何异常,它只是去基础文件夹(“我的电脑”)视图。 @sidewinderguy:同样捏!我在Win XP SP3上使用Visual C#Professional Edition 2008 ... ShowDialog默认打开网络位置? – 2010-08-06 23:46:36