ftp

mac2022-06-30  41

1.url的确定

string ftpServerIP = "29.184.249.98";

string path=new Uri("ftp://"+ftpServerIP+"/").ToString();

2. 创建连接

FtpWebRequest reqFTP;

public void Connection(string path)

{

try

{

//根据uri创建FTPWebRequest对象

reqFTP=(FtpWebRequest)FtpWebRequest.Create(new Uri(path));

//指定数据传输类型

reqFTP.UseBinary=true;

// 指定数据传输类型

reqFTP.UsePassive = false; reqFTP.KeepAlive = false; reqFTP.Credentials = new NetworkCredential(username, password);

 

}

catch(Exception ex)

{

Console.WriteLine(ex.Message);

}

 

}

3

 

using System;using System.Collections;using System.Collections.Generic;using System.IO;using System.Linq;using System.Net;using System.Text;using System.Threading.Tasks;

namespace ftptest{ class FtpMathod { const string username = "spc"; const string password = "iscxans9750"; FtpWebRequest reqFTP;

public string[] GetDeleteFolderArray(string path) { FtpDirInfo ftpDirInfo = new FtpDirInfo(); string[] deleteFolders; // StringBuilder 字符串变量(非线程安全) StringBuilder result = new StringBuilder(); try { Connecion(path); reqFTP.Method = WebRequestMethods.Ftp.ListDirectoryDetails; FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse(); Encoding encoding = Encoding.GetEncoding("GB2312"); StreamReader reader = new StreamReader(response.GetResponseStream(), encoding); String line = reader.ReadLine(); bool flag = false; while (line != null) { FileStruct f = new FileStruct(); f = ftpDirInfo.GetList(line); String fileName = f.Name; if (f.IsDirectory) { result.Append(fileName); result.Append("\n"); flag = true; line = reader.ReadLine(); continue; } line = reader.ReadLine(); } reader.Close(); response.Close(); if (flag) { result.Remove(result.ToString().LastIndexOf("\n"), 1); return result.ToString().Split('\n'); } else { deleteFolders = null; return deleteFolders; } } catch (Exception ex) { Console.WriteLine(ex.ToString(), "获取文件夹数组过程中出现异常"); deleteFolders = null; return deleteFolders; } }

//获取子文件数组 public string[] GetDeleteFileArray(string path) { FtpDirInfo ftpDirInfo = new FtpDirInfo(); List<string> ftpList = new List<string>(); string[] DeleteFiles; StringBuilder result = new StringBuilder(); try { Connecion(path); reqFTP.Method = WebRequestMethods.Ftp.ListDirectoryDetails; FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse(); Encoding encoding = Encoding.GetEncoding("GB2312"); StreamReader reader = new StreamReader(response.GetResponseStream(), encoding); string line = reader.ReadLine(); bool flag = false; while (line != null) { ftpList.Add(line); FileStruct f = new FileStruct(); f = ftpDirInfo.GetList(line); String fileName = f.Name; //排除非文件夹 if (!f.IsDirectory) { result.Append(fileName); result.Append("\n"); flag = true; line = reader.ReadLine(); continue; } line = reader.ReadLine(); } reader.Close(); response.Close(); if (flag) { result.Remove(result.ToString().LastIndexOf("\n"), 1); return result.ToString().Split('\n'); } else { DeleteFiles = null; return DeleteFiles; }

} catch (Exception ex) { Console.WriteLine(ex.ToString(), "获取文件数组过程中出现异常"); DeleteFiles = null; return DeleteFiles; } } public void DeleteFile(string path) { try { Connecion(path);

reqFTP.Method = WebRequestMethods.Ftp.DeleteFile; FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse(); response.Close(); } catch (Exception ex) { Console.WriteLine(ex.ToString(), "删除文件过程中出现错误"); } } public void DeleteDir(string path) { try { string[] folderArray = GetDeleteFolderArray(path); string[] fileArray = GetDeleteFileArray(path);

ArrayList folderArrayList = new ArrayList(); ArrayList fileArrayList = new ArrayList();

//重新构造存放文件夹的数组(用动态数组实现) for (int i = 0; i < folderArray.Length; i++) { if (folderArray[i] == "." || folderArray[i] == ".." || folderArray[i] == "") { } else { folderArrayList.Add(folderArray[i]); } }

//重新构造存放文件的数组(用动态数组实现) for (int i = 0; i < fileArray.Length; i++) { if (fileArray[i] == "") { } else { fileArrayList.Add(fileArray[i]); } }

if (folderArrayList.Count == 0 && fileArrayList.Count == 0) { DeleteFolder(path); } else if (folderArrayList.Count == 0 && fileArrayList.Count != 0) { for (int i = 0; i < fileArrayList.Count; i++) { string fileUri = path + "/" + fileArrayList[i]; DeleteFile(fileUri); } DeleteFolder(path); } else if (folderArrayList.Count != 0 && fileArrayList.Count != 0) { for (int i = 0; i < fileArrayList.Count; i++) { string fileUri = path + "/" + fileArrayList[i]; DeleteFile(fileUri); } for (int i = 0; i < folderArrayList.Count; i++) { string dirUri = path + "/" + folderArrayList[i]; DeleteDir(dirUri); } DeleteFolder(path); } else if (folderArrayList.Count != 0 && fileArrayList.Count == 0) { for (int i = 0; i < folderArrayList.Count; i++) { string dirUri = path + "/" + folderArrayList[i]; DeleteDir(dirUri); } DeleteFolder(path); } } catch (Exception ex) { Console.WriteLine(ex.ToString(), "删除目录过程中出现异常"); } } public void DeleteFolder(string path) //path为所要删除的文件夹的全路径 { try { Connecion(path);

reqFTP.Method = WebRequestMethods.Ftp.RemoveDirectory; FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse(); response.Close(); } catch (Exception ex) { Console.WriteLine(ex.ToString(), "删除文件夹过程中出现错误"); } }

public void CreateFolder(string path) //path为所要删除的文件夹的全路径 { try { Connecion(path);

reqFTP.Method = WebRequestMethods.Ftp.MakeDirectory; FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse(); response.Close(); } catch (Exception ex) { Console.WriteLine(ex.ToString(), "删除文件夹过程中出现错误"); } } public void Connecion(string path) { try { // 根据uri创建FtpWebRequest对象 reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(path)); // 指定数据传输类型

reqFTP.UseBinary = true; // 指定数据传输类型 reqFTP.UsePassive = false; reqFTP.KeepAlive = false; reqFTP.Credentials = new NetworkCredential(username, password); } catch (Exception ex) { Console.WriteLine(ex.Message); } }

public void UploadFile(string path, string dir) //path为所要删除的文件夹的全路径 {

try { Connecion(path); reqFTP.Method = WebRequestMethods.Ftp.UploadFile; FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse();

reqFTP.Credentials = new NetworkCredential(username, password);

// Copy the contents of the file to the request stream. StreamReader sourceStream = new StreamReader(dir); byte[] fileContents = Encoding.UTF8.GetBytes(sourceStream.ReadToEnd()); sourceStream.Close(); reqFTP.ContentLength = fileContents.Length;

Stream requestStream = reqFTP.GetRequestStream(); requestStream.Write(fileContents, 0, fileContents.Length); requestStream.Close();

response = (FtpWebResponse)reqFTP.GetResponse();

Console.WriteLine("Upload File Complete, status {0}", response.StatusDescription);

response.Close(); } catch (Exception ex) { Console.WriteLine(ex.Message); } }

public void GetFileListArray(string path, string dir) { try { GetFtpFileList(path);

if (!GetFtpFileList(path).Contains("ass")) { path += "ass"; CreateFolder(path); } else { path += "ass"; } if (!GetFtpFileList(path).Contains("20101002")) { path += "/" +"20101002"; CreateFolder(path); } else { path += "/" + "20101002"; } path += "/" + "1.html";

UploadFile(path, dir);

} catch (Exception ex) { Console.WriteLine(ex.ToString(), "获取文件数组过程中出现异常"); } } public List<string> GetFtpFileList(string path) { List<string> ftpList = new List<string>();

try {

FtpDirInfo ftpDirInfo = new FtpDirInfo();

StringBuilder result = new StringBuilder();

Connecion(path); reqFTP.Method = WebRequestMethods.Ftp.ListDirectory;

FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse(); Encoding encoding = Encoding.GetEncoding("GB2312"); StreamReader reader = new StreamReader(response.GetResponseStream(), encoding); string line = reader.ReadLine();

while (line != null) { ftpList.Add(line); FileStruct f = new FileStruct(); f = ftpDirInfo.GetList(line); String fileName = f.Name; //排除非文件夹 if (!f.IsDirectory) { line = reader.ReadLine(); continue; } line = reader.ReadLine(); } reader.Close(); response.Close(); } catch (Exception ex) { Console.WriteLine(ex.Message); } return ftpList;

} }}

 

转载于:https://www.cnblogs.com/c-x-a/p/6211025.html

最新回复(0)