C# FTP操作类(获取文件和文件夹列表)
一.如何获取某一目录下的文件和文件夹列表。
由于FtpWebRequest类只提供了WebRequestMethods.Ftp.ListDirectory方式和WebRequestMethods.Ftp.ListDirectoryDetails方式。这个方法获取到的是包含文件列表和文件夹列表的信息。并不是单单只包含某一类。为此我们需要分析获取信息的特点。分析发现,对于文件夹会有“<DIR>”这一项,而文件没有。所以我们可以根据这个来区分。一下分别是获取文件列表和文件夹列表的代码:
1.获取文件夹列表:
1 /// <summary> 2 /// 从ftp服务器上获得文件夹列表 3 /// </summary> 4 /// <param name="RequedstPath">服务器下的相对路径</param> 5 /// <returns></returns> 6 public static List<string> GetDirctory(string RequedstPath) 7 { 8 List<string> strs = new List<string>(); 9 try 10 { 11 string uri = path + RequedstPath; //目标路径 path为服务器地址 12 FtpWebRequest reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(uri)); 13 // ftp用户名和密码 14 reqFTP.Credentials = new NetworkCredential(username, password); 15 reqFTP.Method = WebRequestMethods.Ftp.ListDirectoryDetails; 16 WebResponse response = reqFTP.GetResponse(); 17 StreamReader reader = new StreamReader(response.GetResponseStream());//中文文件名 18 19 string line = reader.ReadLine(); 20 while (line != null) 21 { 22 if (line.Contains("<DIR>")) 23 { 24 string msg = line.Substring(line.LastIndexOf("<DIR>")+5).Trim(); 25 strs.Add(msg); 26 } 27 line = reader.ReadLine(); 28 } 29 reader.Close(); 30 response.Close(); 31 return strs; 32 } 33 catch (Exception ex) 34 { 35 Console.WriteLine("获取目录出错:" + ex.Message); 36 } 37 return strs; 38 }
2.获取文件列表
1 /// <summary> 2 /// 从ftp服务器上获得文件列表 3 /// </summary> 4 /// <param name="RequedstPath">服务器下的相对路径</param> 5 /// <returns></returns> 6 public static List<string> GetFile(string RequedstPath) 7 { 8 List<string> strs = new List<string>(); 9 try 10 { 11 string uri = path + RequedstPath; //目标路径 path为服务器地址 12 FtpWebRequest reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(uri)); 13 // ftp用户名和密码 14 reqFTP.Credentials = new NetworkCredential(username, password); 15 reqFTP.Method = WebRequestMethods.Ftp.ListDirectoryDetails; 16 WebResponse response = reqFTP.GetResponse(); 17 StreamReader reader = new StreamReader(response.GetResponseStream());//中文文件名 18 19 string line = reader.ReadLine(); 20 while (line != null) 21 { 22 if (!line.Contains("<DIR>")) 23 { 24 string msg = line.Substring(39).Trim(); 25 strs.Add(msg); 26 } 27 line = reader.ReadLine(); 28 } 29 reader.Close(); 30 response.Close(); 31 return strs; 32 } 33 catch (Exception ex) 34 { 35 Console.WriteLine("获取文件出错:" + ex.Message); 36 } 37 return strs; 38 }
二.其他代码
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Net; 6 using System.IO; 7 using System.Threading; 8 9 namespace FtpSyn 10 { 11 static public class FtpHelper 12 { 13 //基本设置 14 static private string path = @"ftp://" + Helper.GetAppConfig("obj") + "/"; //目标路径 15 static private string ftpip =Helper.GetAppConfig("obj"); //ftp IP地址 16 static private string username = Helper.GetAppConfig("username"); //ftp用户名 17 static private string password = Helper.GetAppConfig("password"); //ftp密码 18 19 //获取ftp上面的文件和文件夹 20 public static string[] GetFileList(string dir) 21 { 22 string[] downloadFiles; 23 StringBuilder result = new StringBuilder(); 24 FtpWebRequest request; 25 try 26 { 27 request = (FtpWebRequest)FtpWebRequest.Create(new Uri(path)); 28 request.UseBinary = true; 29 request.Credentials = new NetworkCredential(username, password);//设置用户名和密码 30 request.Method = WebRequestMethods.Ftp.ListDirectory; 31 request.UseBinary = true; 32 33 WebResponse response = request.GetResponse(); 34 StreamReader reader = new StreamReader(response.GetResponseStream()); 35 36 string line = reader.ReadLine(); 37 while (line != null) 38 { 39 result.Append(line); 40 result.Append("\n"); 41 Console.WriteLine(line); 42 line = reader.ReadLine(); 43 } 44 // to remove the trailing '\n' 45 result.Remove(result.ToString().LastIndexOf('\n'), 1); 46 reader.Close(); 47 response.Close(); 48 return result.ToString().Split('\n'); 49 } 50 catch (Exception ex) 51 { 52 Console.WriteLine("获取ftp上面的文件和文件夹:" + ex.Message); 53 downloadFiles = null; 54 return downloadFiles; 55 } 56 } 57 58 /// <summary> 59 /// 获取文件大小 60 /// </summary> 61 /// <param name="file">ip服务器下的相对路径</param> 62 /// <returns>文件大小</returns> 63 public static int GetFileSize(string file) 64 { 65 StringBuilder result = new StringBuilder(); 66 FtpWebRequest request; 67 try 68 { 69 request = (FtpWebRequest)FtpWebRequest.Create(new Uri(path + file)); 70 request.UseBinary = true; 71 request.Credentials = new NetworkCredential(username, password);//设置用户名和密码 72 request.Method = WebRequestMethods.Ftp.GetFileSize; 73 74 int dataLength = (int)request.GetResponse().ContentLength; 75 76 return dataLength; 77 } 78 catch (Exception ex) 79 { 80 Console.WriteLine("获取文件大小出错:" + ex.Message); 81 return -1; 82 } 83 } 84 85 /// <summary> 86 /// 文件上传 87 /// </summary> 88 /// <param name="filePath">原路径(绝对路径)包括文件名</param> 89 /// <param name="objPath">目标文件夹:服务器下的相对路径 不填为根目录</param> 90 public static void FileUpLoad(string filePath,string objPath="") 91 { 92 try 93 { 94 string url = path; 95 if(objPath!="") 96 url += objPath + "/"; 97 try 98 { 99 100 FtpWebRequest reqFTP = null; 101 //待上传的文件 (全路径) 102 try 103 { 104 FileInfo fileInfo = new FileInfo(filePath); 105 using (FileStream fs = fileInfo.OpenRead()) 106 { 107 long length = fs.Length; 108 reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(url + fileInfo.Name)); 109 110 //设置连接到FTP的帐号密码 111 reqFTP.Credentials = new NetworkCredential(username, password); 112 //设置请求完成后是否保持连接 113 reqFTP.KeepAlive = false; 114 //指定执行命令 115 reqFTP.Method = WebRequestMethods.Ftp.UploadFile; 116 //指定数据传输类型 117 reqFTP.UseBinary = true; 118 119 using (Stream stream = reqFTP.GetRequestStream()) 120 { 121 //设置缓冲大小 122 int BufferLength = 5120; 123 byte[] b = new byte[BufferLength]; 124 int i; 125 while ((i = fs.Read(b, 0, BufferLength)) > 0) 126 { 127 stream.Write(b, 0, i); 128 } 129 Console.WriteLine("上传文件成功"); 130 } 131 } 132 } 133 catch (Exception ex) 134 { 135 Console.WriteLine("上传文件失败错误为" + ex.Message); 136 } 137 finally 138 { 139 140 } 141 } 142 catch (Exception ex) 143 { 144 Console.WriteLine("上传文件失败错误为" + ex.Message); 145 } 146 finally 147 { 148 149 } 150 } 151 catch (Exception ex) 152 { 153 Console.WriteLine("上传文件失败错误为" + ex.Message); 154 } 155 } 156 157 /// <summary> 158 /// 删除文件 159 /// </summary> 160 /// <param name="fileName">服务器下的相对路径 包括文件名</param> 161 public static void DeleteFileName(string fileName) 162 { 163 try 164 { 165 FileInfo fileInf = new FileInfo(ftpip +""+ fileName); 166 string uri = path + fileName; 167 FtpWebRequest reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(uri)); 168 // 指定数据传输类型 169 reqFTP.UseBinary = true; 170 // ftp用户名和密码 171 reqFTP.Credentials = new NetworkCredential(username, password); 172 // 默认为true,连接不会被关闭 173 // 在一个命令之后被执行 174 reqFTP.KeepAlive = false; 175 // 指定执行什么命令 176 reqFTP.Method = WebRequestMethods.Ftp.DeleteFile; 177 FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse(); 178 response.Close(); 179 } 180 catch (Exception ex) 181 { 182 Console.WriteLine("删除文件出错:" + ex.Message); 183 } 184 } 185 186 /// <summary> 187 /// 新建目录 上一级必须先存在 188 /// </summary> 189 /// <param name="dirName">服务器下的相对路径</param> 190 public static void MakeDir(string dirName) 191 { 192 try 193 { 194 string uri = path + dirName; 195 FtpWebRequest reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(uri)); 196 // 指定数据传输类型 197 reqFTP.UseBinary = true; 198 // ftp用户名和密码 199 reqFTP.Credentials = new NetworkCredential(username, password); 200 reqFTP.Method = WebRequestMethods.Ftp.MakeDirectory; 201 FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse(); 202 response.Close(); 203 } 204 catch (Exception ex) 205 { 206 Console.WriteLine("创建目录出错:" + ex.Message); 207 } 208 } 209 210 /// <summary> 211 /// 删除目录 上一级必须先存在 212 /// </summary> 213 /// <param name="dirName">服务器下的相对路径</param> 214 public static void DelDir(string dirName) 215 { 216 try 217 { 218 string uri = path + dirName; 219 FtpWebRequest reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(uri)); 220 // ftp用户名和密码 221 reqFTP.Credentials = new NetworkCredential(username, password); 222 reqFTP.Method = WebRequestMethods.Ftp.RemoveDirectory; 223 FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse(); 224 response.Close(); 225 } 226 catch (Exception ex) 227 { 228 Console.WriteLine("删除目录出错:" + ex.Message); 229 } 230 } 231 232 /// <summary> 233 /// 从ftp服务器上获得文件夹列表 234 /// </summary> 235 /// <param name="RequedstPath">服务器下的相对路径</param> 236 /// <returns></returns> 237 public static List<string> GetDirctory(string RequedstPath) 238 { 239 List<string> strs = new List<string>(); 240 try 241 { 242 string uri = path + RequedstPath; //目标路径 path为服务器地址 243 FtpWebRequest reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(uri)); 244 // ftp用户名和密码 245 reqFTP.Credentials = new NetworkCredential(username, password); 246 reqFTP.Method = WebRequestMethods.Ftp.ListDirectoryDetails; 247 WebResponse response = reqFTP.GetResponse(); 248 StreamReader reader = new StreamReader(response.GetResponseStream());//中文文件名 249 250 string line = reader.ReadLine(); 251 while (line != null) 252 { 253 if (line.Contains("<DIR>")) 254 { 255 string msg = line.Substring(line.LastIndexOf("<DIR>")+5).Trim(); 256 strs.Add(msg); 257 } 258 line = reader.ReadLine(); 259 } 260 reader.Close(); 261 response.Close(); 262 return strs; 263 } 264 catch (Exception ex) 265 { 266 Console.WriteLine("获取目录出错:" + ex.Message); 267 } 268 return strs; 269 } 270 271 /// <summary> 272 /// 从ftp服务器上获得文件列表 273 /// </summary> 274 /// <param name="RequedstPath">服务器下的相对路径</param> 275 /// <returns></returns> 276 public static List<string> GetFile(string RequedstPath) 277 { 278 List<string> strs = new List<string>(); 279 try 280 { 281 string uri = path + RequedstPath; //目标路径 path为服务器地址 282 FtpWebRequest reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(uri)); 283 // ftp用户名和密码 284 reqFTP.Credentials = new NetworkCredential(username, password); 285 reqFTP.Method = WebRequestMethods.Ftp.ListDirectoryDetails; 286 WebResponse response = reqFTP.GetResponse(); 287 StreamReader reader = new StreamReader(response.GetResponseStream());//中文文件名 288 289 string line = reader.ReadLine(); 290 while (line != null) 291 { 292 if (!line.Contains("<DIR>")) 293 { 294 string msg = line.Substring(39).Trim(); 295 strs.Add(msg); 296 } 297 line = reader.ReadLine(); 298 } 299 reader.Close(); 300 response.Close(); 301 return strs; 302 } 303 catch (Exception ex) 304 { 305 Console.WriteLine("获取文件出错:" + ex.Message); 306 } 307 return strs; 308 } 309 310 } 311 }
转自:http://www.cnblogs.com/rond/archive/2012/07/30/2611295.html