本文是对FTP相关操作,例如新建/删除目录、新建/删除文件、获取文件/目录列表等的总结,方便日后调用。
其实C#操作FTP和操作本地文件/目录差不多,尤其是对动作而言,因为它们都是文件或目录,区别在于FTP可以是远程的文件或目录等,所以需要建立一个连接,当然由于是对FTP的请求,所以会要求从本地发起一个FtpWebRequest,当然这个请求中包含一些设置,例如:请求连接的信用凭证、数据的传输格式、以及请求的FTP动作等等,FTP服务器接收到这个请求后就会返回一个FtpWebResponse了。本来微软已经提供了操作FTP的一些方法,都在System.Net命名空间下,但是感觉用起来还是不是很方便,所以自己又总结了一下,权且当作是对一个简单地封装吧,方便以后再使用的时候可以拿来就用。
由于这些方法都比较简单,而且每个方法我都加了中文注释,所以在此就不再赘述和分别描述了,直接上代码。
using System.Collections;using System.Collections.Generic;using UnityEngine;using UnityEngine.UI;using System.Net;using System.IO;using System;using System.Text;using System.Configuration;using System.Linq;public class FTP_test : MonoBehaviour{ private static string url = "ftp://192.168.1.25/"; private static string userName = "mao"; private static string passWord = "mao"; // private static string pathName = ""; // Listlist; // string[] dir; void Start() { // DeleteFileOnServer(url, "2.txt"); // list = GetDirctory(url, "txt"); // Debug.Log("txt文件夹中的文件个数====" + list.Count); // dir = GetFileList(); // Debug.Log("Ftp服务器中文件总数====" + dir.Length); // int count = GetFileSize("android.txt"); // Debug.Log(count); // FileUpLoad("C:\\Users\\User\\Desktop\\doc\\民机AR检查记录软件详细设计V1.0.doc", "txt"); // MakeDir("tex/tesss"); DelDir("txt/tex"); } /// /// 删除文件
/// ///ftp的ip地址 ///删除文件的名字 public static void DeleteFileOnServer(string serverUri, string pathName) { try { string urlPath = serverUri + pathName; FtpWebRequest request = (FtpWebRequest)WebRequest.Create(urlPath); //指定数据传输类型 request.UseBinary = true; //用户名密码 request.Credentials = new NetworkCredential(userName, passWord); // 默认为true,连接不会被关闭 // 在一个命令之后被执行 request.KeepAlive = false; //指定执行什么命令 request.Method = WebRequestMethods.Ftp.DeleteFile; FtpWebResponse response = (FtpWebResponse)request.GetResponse(); response.Close(); } catch (Exception ex) { Debug.Log("删除文件出错" + ex.Message); } } /// /// 从ftp服务器上获得文件夹列表
/// ///服务器下的相对路径 ///public static ListGetDirctory(string url, string RequedstPath) { Liststrs = new List(); try { string uri = url + RequedstPath; //目标路径 path为服务器地址 FtpWebRequest reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(uri)); // ftp用户名和密码 reqFTP.Credentials = new NetworkCredential(userName, passWord); reqFTP.Method = WebRequestMethods.Ftp.ListDirectoryDetails; WebResponse response = reqFTP.GetResponse(); StreamReader reader = new StreamReader(response.GetResponseStream());//中文文件名 string line = reader.ReadLine(); while (line != null) { if (line.Contains("")) { string msg = line.Substring(line.LastIndexOf("") + 5).Trim(); strs.Add(msg); } line = reader.ReadLine(); } reader.Close(); response.Close(); return strs; } catch (Exception ex) { Console.WriteLine("获取目录出错:" + ex.Message); } return strs; } /// /// 获取ftp服务器上的文件和文件夹列表
/// ///public static string[] GetFileList() { string[] downloadFiles; StringBuilder result = new StringBuilder(); FtpWebRequest request; try { request = (FtpWebRequest)FtpWebRequest.Create(new Uri(url)); request.UseBinary = true; request.Credentials = new NetworkCredential(userName, passWord);//设置用户名和密码 request.Method = WebRequestMethods.Ftp.ListDirectory; request.UseBinary = true; WebResponse response = request.GetResponse(); StreamReader reader = new StreamReader(response.GetResponseStream()); string line = reader.ReadLine(); Debug.Log("============开始读取内容==+ line=========="); while (line != null) { result.Append(line); result.Append("\n"); line = reader.ReadLine(); } // 删除拖尾“\n” result.Remove(result.ToString().LastIndexOf('\n'), 1); reader.Close(); response.Close(); return result.ToString().Split('\n'); } catch (Exception ex) { Debug.Log("获取ftp上面的文件和文件夹:" + ex.Message); downloadFiles = null; return downloadFiles; } } /// /// 获取文件大小
/// ///ip服务器下的相对路径 ///文件大小public static int GetFileSize(string file) { // StringBuilder result = new StringBuilder(); FtpWebRequest request; try { request = (FtpWebRequest)FtpWebRequest.Create(new Uri(url + file)); Debug.Log(url + file); request.UseBinary = true; request.Credentials = new NetworkCredential(userName, passWord);//设置用户名和密码 request.Method = WebRequestMethods.Ftp.GetFileSize; int dataLength = (int)request.GetResponse().ContentLength; return dataLength; } catch (Exception ex) { Debug.Log("获取文件大小出错:" + ex.Message); return -1; } } /// /// 文件上传
/// ///原路径(绝对路径)包括文件名 ///目标文件夹:服务器下的相对路径 不填为根目录 public static void FileUpLoad(string filePath, string objPath = "") { try { if (objPath != "") url += objPath + "/"; try { FtpWebRequest reqFTP = null; //待上传的文件 (全路径) try { FileInfo fileInfo = new FileInfo(filePath); using (FileStream fs = fileInfo.OpenRead()) { long length = fs.Length; reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(url + fileInfo.Name)); //设置连接到FTP的帐号密码 reqFTP.Credentials = new NetworkCredential(userName, passWord); //设置请求完成后是否保持连接 reqFTP.KeepAlive = false; //指定执行命令 reqFTP.Method = WebRequestMethods.Ftp.UploadFile; //指定数据传输类型 reqFTP.UseBinary = true; using (Stream stream = reqFTP.GetRequestStream()) { //设置缓冲大小 int BufferLength = 5120; byte[] b = new byte[BufferLength]; int i; while ((i = fs.Read(b, 0, BufferLength)) > 0) { stream.Write(b, 0, i); } Debug.Log("上传文件成功"); } } } catch (Exception ex) { Debug.Log("上传文件失败错误为" + ex.Message); } finally { } } catch (Exception ex) { Debug.Log("上传文件失败错误为" + ex.Message); } finally { } } catch (Exception ex) { Debug.Log("上传文件失败错误为" + ex.Message); } } /// /// 新建目录 上一级必须先存在
/// ///服务器下的相对路径 public static void MakeDir(string dirName) { try { string uri = url + dirName; FtpWebRequest reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(uri)); // 指定数据传输类型 reqFTP.UseBinary = true; // ftp用户名和密码 reqFTP.Credentials = new NetworkCredential(userName, passWord); reqFTP.Method = WebRequestMethods.Ftp.MakeDirectory; FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse(); response.Close(); } catch (Exception ex) { Console.WriteLine("创建目录出错:" + ex.Message); } } /// /// 删除目录 上一级必须先存在
/// ///服务器下的相对路径 public static void DelDir(string dirName) { try { string uri = url + dirName; Debug.Log(uri); FtpWebRequest reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(uri)); // ftp用户名和密码 reqFTP.Credentials = new NetworkCredential(userName, passWord); reqFTP.Method = WebRequestMethods.Ftp.RemoveDirectory; FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse(); Debug.Log(response); response.Close(); } catch (Exception ex) { Console.WriteLine("删除目录出错:" + ex.Message); } } /// /// 从ftp服务器上获得文件列表
/// ///服务器下的相对路径 ///public static ListGetFile(string RequedstPath) { Liststrs = new List(); try { string uri = url + RequedstPath; //目标路径 path为服务器地址 FtpWebRequest reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(uri)); // ftp用户名和密码 reqFTP.Credentials = new NetworkCredential(userName, passWord); reqFTP.Method = WebRequestMethods.Ftp.ListDirectoryDetails; WebResponse response = reqFTP.GetResponse(); StreamReader reader = new StreamReader(response.GetResponseStream());//中文文件名 string line = reader.ReadLine(); while (line != null) { if (!line.Contains(""))
{
string msg = line.Substring(39).Trim();
strs.Add(msg);
}
line = reader.ReadLine();
}
reader.Close();
response.Close();
return strs;
}
catch (Exception ex)
{
Debug.Log("获取文件出错:" + ex.Message);
}
return strs;
}
}
网友评论