我在我的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