Guest User

Untitled

a guest
Jan 19th, 2018
88
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.05 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.IO;
  4. using System.Net;
  5.  
  6. namespace Ftp {
  7. public class Client {
  8. private string password;
  9. private string userName;
  10. private string uri;
  11. private int bufferSize = 1024;
  12.  
  13. public bool Passive = true;
  14. public bool Binary = true;
  15. public bool EnableSsl = false;
  16. public bool Hash = false;
  17.  
  18. public Client(string uri, string userName, string password) {
  19. this.uri = uri;
  20. this.userName = userName;
  21. this.password = password;
  22. }
  23.  
  24. public string AppendFile(string source, string destination) {
  25. var request = createRequest(combine(uri, destination), WebRequestMethods.Ftp.AppendFile);
  26.  
  27. using (var stream = request.GetRequestStream()) {
  28. using (var fileStream = System.IO.File.Open(source, FileMode.Open)) {
  29. int num;
  30.  
  31. byte[] buffer = new byte[bufferSize];
  32.  
  33. while ((num = fileStream.Read(buffer, 0, buffer.Length)) > 0) {
  34. if (Hash)
  35. Console.Write("#");
  36.  
  37. stream.Write(buffer, 0, num);
  38. }
  39. }
  40. }
  41.  
  42. return getStatusDescription(request);
  43. }
  44.  
  45. public string ChangeWorkingDirectory(string path) {
  46. uri = combine(uri, path);
  47.  
  48. return PrintWorkingDirectory();
  49. }
  50.  
  51. public string DeleteFile(string fileName) {
  52. var request = createRequest(combine(uri, fileName), WebRequestMethods.Ftp.DeleteFile);
  53.  
  54. return getStatusDescription(request);
  55. }
  56.  
  57. public string DownloadFile(string source, string dest) {
  58. var request = createRequest(combine(uri, source), WebRequestMethods.Ftp.DownloadFile);
  59.  
  60. byte[] buffer = new byte[bufferSize];
  61.  
  62. using (var response = (FtpWebResponse)request.GetResponse()) {
  63. using (var stream = response.GetResponseStream()) {
  64. using (var fs = new FileStream(dest, FileMode.OpenOrCreate)) {
  65. int readCount = stream.Read(buffer, 0, bufferSize);
  66.  
  67. while (readCount > 0) {
  68. if (Hash)
  69. Console.Write("#");
  70.  
  71. fs.Write(buffer, 0, readCount);
  72. readCount = stream.Read(buffer, 0, bufferSize);
  73. }
  74. }
  75. }
  76.  
  77. return response.StatusDescription;
  78. }
  79. }
  80.  
  81. public DateTime GetDateTimestamp(string fileName) {
  82. var request = createRequest(combine(uri, fileName), WebRequestMethods.Ftp.GetDateTimestamp);
  83.  
  84. using (var response = (FtpWebResponse)request.GetResponse()) {
  85. return response.LastModified;
  86. }
  87. }
  88.  
  89. public long GetFileSize(string fileName) {
  90. var request = createRequest(combine(uri, fileName), WebRequestMethods.Ftp.GetFileSize);
  91.  
  92. using (var response = (FtpWebResponse)request.GetResponse()) {
  93. return response.ContentLength;
  94. }
  95. }
  96.  
  97. public string[] ListDirectory() {
  98. var list = new List<string>();
  99.  
  100. var request = createRequest(WebRequestMethods.Ftp.ListDirectory);
  101.  
  102. using (var response = (FtpWebResponse)request.GetResponse()) {
  103. using (var stream = response.GetResponseStream()) {
  104. using (var reader = new StreamReader(stream, true)) {
  105. while (!reader.EndOfStream) {
  106. list.Add(reader.ReadLine());
  107. }
  108. }
  109. }
  110. }
  111.  
  112. return list.ToArray();
  113. }
  114.  
  115. public string[] ListDirectoryDetails() {
  116. var list = new List<string>();
  117.  
  118. var request = createRequest(WebRequestMethods.Ftp.ListDirectoryDetails);
  119.  
  120. using (var response = (FtpWebResponse)request.GetResponse()) {
  121. using (var stream = response.GetResponseStream()) {
  122. using (var reader = new StreamReader(stream, true)) {
  123. while (!reader.EndOfStream) {
  124. list.Add(reader.ReadLine());
  125. }
  126. }
  127. }
  128. }
  129.  
  130. return list.ToArray();
  131. }
  132.  
  133. public string MakeDirectory(string directoryName) {
  134. var request = createRequest(combine(uri, directoryName), WebRequestMethods.Ftp.MakeDirectory);
  135.  
  136. return getStatusDescription(request);
  137. }
  138.  
  139. public string PrintWorkingDirectory() {
  140. var request = createRequest(WebRequestMethods.Ftp.PrintWorkingDirectory);
  141.  
  142. return getStatusDescription(request);
  143. }
  144.  
  145. public string RemoveDirectory(string directoryName) {
  146. var request = createRequest(combine(uri, directoryName), WebRequestMethods.Ftp.RemoveDirectory);
  147.  
  148. return getStatusDescription(request);
  149. }
  150.  
  151. public string Rename(string currentName, string newName) {
  152. var request = createRequest(combine(uri, currentName), WebRequestMethods.Ftp.Rename);
  153.  
  154. request.RenameTo = newName;
  155.  
  156. return getStatusDescription(request);
  157. }
  158.  
  159. public string UploadFile(string source, string destination) {
  160. var request = createRequest(combine(uri, destination), WebRequestMethods.Ftp.UploadFile);
  161.  
  162. using (var stream = request.GetRequestStream()) {
  163. using (var fileStream = System.IO.File.Open(source, FileMode.Open)) {
  164. int num;
  165.  
  166. byte[] buffer = new byte[bufferSize];
  167.  
  168. while ((num = fileStream.Read(buffer, 0, buffer.Length)) > 0) {
  169. if (Hash)
  170. Console.Write("#");
  171.  
  172. stream.Write(buffer, 0, num);
  173. }
  174. }
  175. }
  176.  
  177. return getStatusDescription(request);
  178. }
  179.  
  180. public string UploadFileWithUniqueName(string source) {
  181. var request = createRequest(WebRequestMethods.Ftp.UploadFileWithUniqueName);
  182.  
  183. using (var stream = request.GetRequestStream()) {
  184. using (var fileStream = System.IO.File.Open(source, FileMode.Open)) {
  185. int num;
  186.  
  187. byte[] buffer = new byte[bufferSize];
  188.  
  189. while ((num = fileStream.Read(buffer, 0, buffer.Length)) > 0) {
  190. if (Hash)
  191. Console.Write("#");
  192.  
  193. stream.Write(buffer, 0, num);
  194. }
  195. }
  196. }
  197.  
  198. using (var response = (FtpWebResponse)request.GetResponse()) {
  199. return Path.GetFileName(response.ResponseUri.ToString());
  200. }
  201. }
  202.  
  203. private FtpWebRequest createRequest(string method) {
  204. return createRequest(uri, method);
  205. }
  206.  
  207. private FtpWebRequest createRequest(string uri, string method) {
  208. var r = (FtpWebRequest)WebRequest.Create(uri);
  209.  
  210. r.Credentials = new NetworkCredential(userName, password);
  211. r.Method = method;
  212. r.UseBinary = Binary;
  213. r.EnableSsl = EnableSsl;
  214. r.UsePassive = Passive;
  215.  
  216. return r;
  217. }
  218.  
  219. private string getStatusDescription(FtpWebRequest request) {
  220. using (var response = (FtpWebResponse)request.GetResponse()) {
  221. return response.StatusDescription;
  222. }
  223. }
  224.  
  225. private string combine(string path1, string path2) {
  226. return Path.Combine(path1, path2).Replace("\\", "/");
  227. }
  228. }
  229. }
Add Comment
Please, Sign In to add comment