|
1 public class FtpLib
2 {
3 string ftpServerIP;
4 string ftpUserID;
5 string ftpPassword;
6 FtpWebRequest reqFTP;
7
8 public FtpLib(string ftpServerIP, string ftpUserID, string ftpPassword)
9 {
10 this.ftpServerIP = ftpServerIP;
11 this.ftpUserID = ftpUserID;
12 this.ftpPassword = ftpPassword;
13 }
14
15 ///
16 /// 创建连接
17 ///
18 ///
19 private void Connect(String path)
20 {
21 reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(path));
22 reqFTP.UseBinary = true;
23 reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword);
24 }
25
26 ///
27 /// 获取文件列表
28 ///
29 ///
30 ///
31 ///
32 private string[] GetFileList(string path, string WRMethods)
33 {
34 string[] downloadFiles;
35 StringBuilder result = new StringBuilder();
36 try
37 {
38 Connect(path);
39 reqFTP.Method = WRMethods;
40 WebResponse response = reqFTP.GetResponse();
41 StreamReader reader = new StreamReader(response.GetResponseStream(), System.Text.Encoding.Default);//中文文件名
42 string line = reader.ReadLine();
43 while (line != null)
44 {
45 result.Append(line);
46 result.Append("\n");
47 line = reader.ReadLine();
48 }
49 // to remove the trailing '\n'
50 result.Remove(result.ToString().LastIndexOf('\n'), 1);
51 reader.Close();
52 response.Close();
53 return result.ToString().Split('\n');
54 }
55 catch (Exception ex)
56 {
57 Helper.WriteLog(ex.Message + "\r\n" + ex.StackTrace);
58 downloadFiles = null;
59 return downloadFiles;
60 }
61 }
62
63 ///
64 /// 上传文件
65 ///
66 ///
67 public void Upload(string filename)
68 {
69 FileInfo fileInf = new FileInfo(filename);
70 string uri = "ftp://" + ftpServerIP + "/" +DateTime.Now.ToString("yyyyMMdd")+ "/" + fileInf.Name;
71 Connect(uri);
72 reqFTP.KeepAlive = false;
73 reqFTP.Method = WebRequestMethods.Ftp.UploadFile;
74 reqFTP.ContentLength = fileInf.Length;
75 int buffLength = 2048;
76 byte[] buff = new byte[buffLength];
77 int contentLen;
78 FileStream fs = fileInf.OpenRead();
79 try
80 {
81 Stream strm = reqFTP.GetRequestStream();
82 contentLen = fs.Read(buff, 0, buffLength);
83 while (contentLen != 0)
84 {
85 strm.Write(buff, 0, contentLen);
86 contentLen = fs.Read(buff, 0, buffLength);
87 }
88 strm.Close();
89 fs.Close();
90 }
91 catch (Exception ex)
92 {
93 Helper.WriteLog(ex.Message + "\r\n" + ex.StackTrace);
94 }
95 }
96
97 ///
98 /// 删除文件
99 ///
100 ///
101 public void DeleteFileName(string fileName)
102 {
103 try
104 {
105 FileInfo fileInf = new FileInfo(fileName);
106 string uri = "ftp://" + ftpServerIP + "/" + DateTime.Now.ToString("yyyyMMdd") + "/" + fileInf.Name;
107 Connect(uri);
108 reqFTP.KeepAlive = false;
109 reqFTP.Method = WebRequestMethods.Ftp.DeleteFile;
110 FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse();
111 response.Close();
112 }
113 catch (Exception ex)
114 {
115 Helper.WriteLog(ex.Message + "\r\n" + ex.StackTrace);
116 }
117 }
118
119 ///
120 /// 判断文件是否存在
121 ///
122 ///
123 ///
124 ///
125 public bool ExecFile(string fileName, string ftpPath)
126 {
127
128 FtpCheckDirectoryExist(ftpPath);
129
130 string[] strList = GetFileList(ftpPath, WebRequestMethods.Ftp.ListDirectoryDetails);
131 if (strList != null)
132 {
133 if (strList.Length > 0)
134 {
135 foreach (string str in strList)
136 {
137 if (str.Contains(fileName))
138 {
139 return true;
140 }
141 }
142 }
143 }
144 else
145 {
146
147 }
148 return false;
149 }
150
151 //判断文件夹是否存,不存则创建,存在则返回
152 public void FtpCheckDirectoryExist(string destFilePath)
153 {
154 string fullDir = FtpParseDirectory(destFilePath);
155 string[] dirs = fullDir.Split('/');
156 string curDir = DateTime.Now.ToString("yyyyMMdd");
157 for (int i = 0; i < dirs.Length; i++)
158 {
159 string dir = dirs;
160 if (dir == string.Empty)
161 {
162 try
163 {
164 curDir += dir + "/";
165 FtpMakeDir(curDir);
166 break;
167 }
168 catch (Exception)
169 { }
170 }
171 }
172 }
173 public string FtpParseDirectory(string destFilePath)
174 {
175 return destFilePath.Substring(0, destFilePath.LastIndexOf("/"));
176 }
177 //创建目录
178 public Boolean FtpMakeDir(string localFile)
179 {
180 FtpWebRequest req = (FtpWebRequest)WebRequest.Create("ftp://" + this.ftpServerIP + "/" + localFile);
181 req.Credentials = new NetworkCredential(this.ftpUserID, this.ftpPassword);
182 req.Method = WebRequestMethods.Ftp.MakeDirectory;
183 try
184 {
185 FtpWebResponse response = (FtpWebResponse)req.GetResponse();
186 response.Close();
187 }
188 catch (Exception)
189 {
190 req.Abort();
191 return false;
192 }
193 req.Abort();
194 return true;
195 }
196 }
|
|
|