using System; using System.Collections.Generic; using System.Data.SqlClient; using System.Data; using System.Diagnostics; using System.IO; using System.Net; using System.Text; namespace ConsoleApplication1 { class Ftp { public Ftp() { GetFileList(); //Upload(@"E:/HZW_N7610.jar"); //MakeDirectory("font"); } private void Upload(string filename) { FileInfo fileInf = new FileInfo(filename); string ftpServerIP = "192.168.0.17"; string ftpUserID = "BJBSH"; string ftpPassword = "BJBSH"; string uri = "ftp://" + ftpServerIP + "/" + fileInf.Name; FtpWebRequest reqFTP; // 根据uri创建FtpWebRequest对象 reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri("ftp://" + ftpServerIP + "/" + fileInf.Name)); // ftp用户名和密码 reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword); // 默认为true,连接不会被关闭 // 在一个命令之后被执行 reqFTP.KeepAlive = false; // 指定执行什么命令 reqFTP.Method = WebRequestMethods.Ftp.UploadFile; // true,指示服务器要传输的是二进制数据;false,指示数据为文本。默认值为 true。 reqFTP.UseBinary = true; // 上传文件时通知服务器文件的大小 reqFTP.ContentLength = fileInf.Length; // 缓冲大小设置为2kb int buffLength = 2048; byte[] buff = new byte[buffLength]; int contentLen; // 打开一个文件流 (System.IO.FileStream) 去读上传的文件 FileStream fs = fileInf.OpenRead(); try { // 把上传的文件写入流 Stream strm = reqFTP.GetRequestStream(); // 每次读文件流的2kb contentLen = fs.Read(buff, 0, buffLength); // 流内容没有结束 while (contentLen != 0) { // 把内容从file stream 写入 upload stream strm.Write(buff, 0, contentLen); contentLen = fs.Read(buff, 0, buffLength); } // 关闭两个流 strm.Close(); fs.Close(); } catch (Exception ex) { Debug.WriteLine(ex); } } private void Download(string filePath, string fileName) { FtpWebRequest reqFTP; string ftpServerIP = "192.168.0.17"; string ftpUserID = "BJBSH"; string ftpPassword = "BJBSH"; try { FileStream outputStream = new FileStream(filePath + "//" + fileName, FileMode.Create); reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri("ftp://" + ftpServerIP + "/" + fileName)); reqFTP.Method = WebRequestMethods.Ftp.DownloadFile; reqFTP.UseBinary = true; 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); while (readCount > 0) { outputStream.Write(buffer, 0, readCount); readCount = ftpStream.Read(buffer, 0, bufferSize); } ftpStream.Close(); outputStream.Close(); response.Close(); } catch (Exception ex) { Debug.WriteLine(ex); } } public string[] GetFileList() { string ftpServerIP = "127.0.0.1"; string ftpUserID = "BJBSH"; string ftpPassword = "BJBSH"; string[] downloadFiles; StringBuilder result = new StringBuilder(); FtpWebRequest reqFTP; try { reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri("ftp://" + ftpServerIP + "/")); reqFTP.UseBinary = true; reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword); reqFTP.Method = WebRequestMethods.Ftp.ListDirectory; WebResponse response = reqFTP.GetResponse(); StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.Default); string line = reader.ReadLine(); while (line != null) { result.Append(line); result.Append("/n"); line = reader.ReadLine(); } // to remove the trailing '/n' result.Remove(result.ToString().LastIndexOf('/n'), 1); reader.Close(); response.Close(); return result.ToString().Split('/n'); } catch (Exception ex) { Debug.WriteLine(ex); downloadFiles = null; return downloadFiles; } } public void MakeDirectory(string font) { string ftpServerIP = "192.168.0.17"; string ftpUserID = "BJBSH"; string ftpPassword = "BJBSH"; string[] downloadFiles; StringBuilder result = new StringBuilder(); FtpWebRequest reqFTP; try { reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri("ftp://" + ftpServerIP + "/" + font)); reqFTP.UseBinary = true; reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword); reqFTP.Method = WebRequestMethods.Ftp.MakeDirectory; WebResponse response = reqFTP.GetResponse(); //StreamReader reader = new StreamReader(response.GetResponseStream()); //string line = reader.ReadLine(); //while (line != null) //{ // result.Append(line); // result.Append("/n"); // line = reader.ReadLine(); //} to remove the trailing '/n' //result.Remove(result.ToString().LastIndexOf('/n'), 1); //reader.Close(); //response.Close(); //return result.ToString().Split('/n'); } catch (Exception ex) { Debug.WriteLine(ex); //downloadFiles = null; //return downloadFiles; } } } }