一.如何获取某一目录下的文件和文件夹列表。
由于FtpWebRequest类只提供了WebRequestMethods.Ftp.ListDirectory方式和WebRequestMethods.Ftp.ListDirectoryDetails方式。这个方法获取到的是包含文件列表和文件夹列表的信息。并不是单单只包含某一类。为此我们需要分析获取信息的特点。分析发现,对于文件夹会有“”这一项,而文件没有。所以我们可以根据这个来区分。一下分别是获取文件列表和文件夹列表的代码:
1.获取文件夹列表:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 ///
2 /// 从ftp服务器上获得文件夹列表
3 ///
4 /// 服务器下的相对路径
5 ///
6 public static List GetDirctory(string RequedstPath)
7 {
8 List strs = new List();
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(""))
23 {
24 string msg = line.Substring(line.LastIndexOf("")+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 }
View Code
2.获取文件列表
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 ///
2 /// 从ftp服务器上获得文件列表
3 ///
4 /// 服务器下的相对路径
5 ///
6 public static List GetFile(string RequedstPath)
7 {
8 List strs = new List();
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(""))
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 }
View Code
二.其他代码
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
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 ///
59 /// 获取文件大小
60 ///
61 /// ip服务器下的相对路径
62 /// 文件大小
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 ///
86 /// 文件上传
87 ///
88 /// 原路径(绝对路径)包括文件名
89 /// 目标文件夹:服务器下的相对路径 不填为根目录
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 ///
158 /// 删除文件
159 ///
160 /// 服务器下的相对路径 包括文件名
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 ///
187 /// 新建目录 上一级必须先存在
188 ///
189 /// 服务器下的相对路径
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 ///
211 /// 删除目录 上一级必须先存在
212 ///
213 /// 服务器下的相对路径
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 ///
233 /// 从ftp服务器上获得文件夹列表
234 ///
235 /// 服务器下的相对路径
236 ///
237 public static List GetDirctory(string RequedstPath)
238 {
239 List strs = new List();
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(""))
254 {
255 string msg = line.Substring(line.LastIndexOf("")+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 ///
272 /// 从ftp服务器上获得文件列表
273 ///
274 /// 服务器下的相对路径
275 ///
276 public static List GetFile(string RequedstPath)
277 {
278 List strs = new List();
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(""))
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 }
View Code
转自:http://www.cnblogs.com/rond/archive/2012/07/30/2611295.html
|