標籤:winform style class blog code tar
開發中常常遇到這樣的問題:需要將伺服器端的檔案下載到用戶端。這種情況分為兩種,一種是windows環境,一種是web環境。前兩天在winform開發中就遇到過這樣一個問題,上網搜尋後沒有發現現成的demo,所以自己花費了一點時間,做了一個簡單的檔案儲存的demo,分享如下:
首先需要寫一個下載的方法,將其抽象為一個靜態類,以方便調用,如下:
public static class FileHelper { /// <summary> /// 下載伺服器檔案至用戶端,Create By Wangjianhui /// </summary> /// <param name="URL">被下載的檔案地址,絕對路徑</param> /// <param name="DirFilePath">另存放的目錄</param> public static void DownloadFileToLocal(string URL, string DirFilePath,out string errorMeesage) { WebClient client = new WebClient(); string fileName = URL.Substring(URL.LastIndexOf("\\") + 1); //被下載的檔案名稱 //string Path = Dir + fileName; //另存新檔的絕對路徑+檔案名稱 try { WebRequest myre = WebRequest.Create(URL); errorMeesage = String.Empty; } catch (Exception e1) { errorMeesage = e1.Message; //MessageBox.Show(e1.Message, "Error"); } try { client.DownloadFile(URL, DirFilePath); errorMeesage = String.Empty; } catch (Exception e2) { errorMeesage = e2.Message; //MessageBox.Show(e2.Message, "Error"); } } }
現在遇到一個痛點,就是儲存的路徑不能寫死,而是由客戶自己指定,由此很自然的想到了SaveFileDialog控制項,在Form表單中添加一個SaveFileDialog控制項,儲存按鈕的代碼如下:
private void btnSave_Click(object sender, EventArgs e) { string sourceFile="E:\\FileFolder\\123.fff"; System.IO.FileInfo f = new System.IO.FileInfo(sourceFile); string sourceFileName = f.Name;//原檔案名稱 string dirFilePath = string.Empty; saveFileDialogForFFF.FileName = sourceFileName; saveFileDialogForFFF.Filter = "電子書檔案(.fff)|*.fff"; if (saveFileDialogForFFF.ShowDialog() == DialogResult.OK) { dirFilePath = saveFileDialogForFFF.FileName; } string errorMessage = string.Empty; FileHelper.DownloadFileToLocal(sourceFile, dirFilePath, out errorMessage); if (!string.IsNullOrEmpty(errorMessage)) { MessageBox.Show(errorMessage); } else { MessageBox.Show("The file has been saved successfully"); } }
當開啟SaveFileDialog控制項時,檔案名稱的文字框中預設為原檔案名稱,也可以手動改寫為其它名稱,通過導向選擇要儲存的路徑,點擊確定按鈕,伺服器端的檔案就會被儲存到用戶端相應的路徑下!