1. 程式人生 > >C# FileStream進行FTP服務上傳文件和下載文件

C# FileStream進行FTP服務上傳文件和下載文件

兩個 upload open object private 原因 als down adc

定義FileStream類的操作類:操作類名: FtpUpDown

上傳文件

/// <summary>

/// 上傳文件

/// </summary>

/// <param name="localpath">上傳文件的全路徑 例@"D:\123.txt"</param>

/// <param name="ftppath"></param>

/// <returns></returns>

public bool Upload(string localpath, string ftppath)

{

bool bol = false;

try

{

FileInfo fileInf = new FileInfo(localpath);

//替換符號

ftppath = ftppath.Replace("\\", "/");

//組合ftp上傳文件路徑

string uri = "ftp://" + ftppath + "/" + fileInf.Name;

// 根據uri創建FtpWebRequest對象

reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(uri));

// 指定數據傳輸類型

reqFTP.UseBinary = true;

// ftp用戶名和密碼

reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword);

// 默認為true,連接不會被關閉

// 在一個命令之後被執行

reqFTP.KeepAlive = false;

// 指定執行什麽命令

reqFTP.Method = WebRequestMethods.Ftp.UploadFile;

// 上傳文件時通知服務器文件的大小

reqFTP.ContentLength = fileInf.Length;

// 緩沖大小設置為kb

int buffLength = 2048;

byte[] buff = new byte[buffLength];

int contentLen;

// 打開一個文件流(System.IO.FileStream) 去讀上傳的文件

FileStream fs = fileInf.OpenRead();

try

{

// 把上傳的文件寫入流

Stream strm = reqFTP.GetRequestStream();

// 每次讀文件流的kb

contentLen = fs.Read(buff, 0, buffLength);

// 流內容沒有結束

while (contentLen != 0)

{

// 把內容從file stream 寫入upload stream

strm.Write(buff, 0, contentLen);

contentLen = fs.Read(buff, 0, buffLength);

bol = true;

}

// 關閉兩個流

strm.Close();

fs.Close();

}

catch (Exception ex)

{

MessageBox.Show("上傳文件失敗,失敗原因;" + ex.Message);

}

}

catch (Exception ex)

{

MessageBox.Show("上傳文件失敗,失敗原因;" + ex.Message);

}

return bol;

}

下載文件:

/// <summary>

/// 下載文件

/// </summary>

/// <param name="localpath"></param>

/// <param name="fileName"></param>

/// <param name="errorinfo"></param>

/// <returns></returns>

public bool Download(string localpath, string fileName, out string errorinfo)

{

try

{

String onlyFileName = Path.GetFileName(fileName);

string newFileName = localpath + "\\" + onlyFileName;

if (File.Exists(newFileName))

{

errorinfo = string.Format("本地文件{0}已存在,無法下載", newFileName);

return false;

}

string url = "ftp://" + ftpServerIP + "/FileInfo/" + fileName;

// 根據uri創建FtpWebRequest對象

reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(url));

// 指定數據傳輸類型

reqFTP.UseBinary = true;

// ftp用戶名和密碼

reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword);

FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse();

Stream ftpStream = response.GetResponseStream();

long cl = response.ContentLength;

int bufferSize = 2048;

int readCount;

byte[] buffer = new byte[bufferSize];

readCount = ftpStream.Read(buffer, 0, bufferSize);

FileStream outputStream = new FileStream(newFileName, FileMode.Create, FileAccess.Write);

while (readCount > 0)

{

outputStream.Write(buffer, 0, readCount);

readCount = ftpStream.Read(buffer, 0, bufferSize);

}

ftpStream.Close();

outputStream.Close();

response.Close();

errorinfo = "";

return true;

}

catch (Exception ex)

{

errorinfo = string.Format("因{0},無法下載", ex.Message);

return false;

}

}

調用方法:

/// <summary>

/// 上傳

/// </summary>

/// <param name="sender"></param>

/// <param name="e"></param>

private void Button_Click_1(object sender, RoutedEventArgs e)

{

FtpUpDown ftp = new FtpUpDown(ftpServerIP, ftpUserID, ftpPassword);

string localpath = @"D:\123.txt";

string ftppath = ftpServerIP + @"\FileInfo";

bool bol = ftp.Upload(localpath, ftppath);

if (bol == true)

MessageBox.Show("上傳成功");

else

MessageBox.Show("上傳失敗");

}

/// <summary>

/// 下載

/// </summary>

/// <param name="sender"></param>

/// <param name="e"></param>

private void Button_Click_2(object sender, RoutedEventArgs e)

{

string errorinfo;

string localpath = @"E:\qzq\FileInfo";

if (!Directory.Exists(localpath))

{

Directory.CreateDirectory(localpath);

}

string filename = "123.txt";

if (!File.Exists(localpath + "\\" + filename))

{

FtpUpDown ftp = new FtpUpDown(ftpServerIP, ftpUserID, ftpPassword);

bool bol = ftp.Download(localpath, filename, out errorinfo);

if (bol == true)

MessageBox.Show("下載成功");

else

MessageBox.Show("下載失敗:" + errorinfo + "");

}

else

{

MessageBox.Show("下載文件已存在!");

}

}

其中: ftpServerIP:上傳服務的IP地址。

ftpUserID: 上傳服務的登錄名。

ftpPassword: 上傳服務的密碼。

C# FileStream進行FTP服務上傳文件和下載文件