小色哥 C# 竣事FTP的上传与下载操作
发布日期:2024-09-21 21:15 点击次数:141FTP 是一种文献传输合同小色哥小色哥,英文全称 File Transfer Protocol。咱们偶然也会从FTP劳动器下载文献、检察、删除或将腹地文献上传到劳动器上。那若何使用C#竣事这些基本操作的。 底下通过代码示例了解C#为咱们提供的步履。
竣事咱们需要引入System.Net定名空间,其包含了与集会通讯关系的类和步履。其中FtpWebRequest与FtpWebResponse类提供了对FTP文献传输合同的关系操作。底下主要通过代码示例展示其竣事:1、下载示例/// <summary>/// 下载/// </summary>/// <param name='remoteFileName'>劳动器文献</param>/// <param name='localPath'>腹地文献目次</param>/// <param name='localFileName'>腹地文献</param>public void Download(string remoteFileName,string localPath, string localFileName){ try { if (Directory.Exists(localPath) == false) { Directory.CreateDirectory(localPath); } string localFullFilename = $'{localPath}{Path.DirectorySeparatorChar}{localFileName}'; // FtpWebRequest ftpWebRequest = (FtpWebRequest)FtpWebRequest.Create(this.Host + '/' + remoteFileName); // 提供FTP 登录信息 ftpWebRequest.Credentials = new NetworkCredential(this.UserName, this.Password); // 指定文献传输的数据类型 ftpWebRequest.UseBinary = true; // 客诞生户端专揽设施的数据传输进程的活动 ftpWebRequest.UsePassive = true; // 指定苦求完成之后是否关闭畅达 ftpWebRequest.KeepAlive = true; // 苦求下载文献步履 ftpWebRequest.Method = WebRequestMethods.Ftp.DownloadFile; // 与FTP劳动器诞生复返通讯 FtpWebResponse ftpWebResponse = (FtpWebResponse)ftpWebRequest.GetResponse(); // 赢得FTP劳动器的反应流 using (Stream fileStream = ftpWebResponse.GetResponseStream()) { // 创建读写文献流 using (FileStream localFileStream = new FileStream(localFullFilename, FileMode.Create)) { // 下载数据的缓冲区 byte[] fileBuffer = new byte[bufferSize]; // 对取数据流 int bytesRead = fileStream.Read(fileBuffer, 0, bufferSize); // 通过写入缓冲数据下载文献,直到传输完成 while (bytesRead > 0) { localFileStream.Write(fileBuffer, 0, bytesRead); bytesRead = fileStream.Read(fileBuffer, 0, bufferSize); } } } ftpWebResponse.Close(); ftpWebRequest.Abort(); ; } catch (Exception exception) { throw new Exception(exception.Message); }}2、创建目次示例/// <summary>/// 创建目次/// </summary>/// <param name='directory'></param>public void CreateDirectory(string directory){ try { string uri = $'{this.Host}:{this.Port}/{directory}'; // 创建 FTP 苦求 FtpWebRequest ftpWebRequest = (FtpWebRequest)FtpWebRequest.Create(uri); // 提供FTP 登录信息 ftpWebRequest.Credentials = new NetworkCredential(this.UserName, this.Password); // 指定文献传输的数据类型 ftpWebRequest.UseBinary = true; // 客诞生户端专揽设施的数据传输进程的活动 ftpWebRequest.UsePassive = true; // 指定苦求完成之后是否关闭畅达 ftpWebRequest.KeepAlive = true; // 苦求上传文献步履 ftpWebRequest.Method = WebRequestMethods.Ftp.MakeDirectory; // FtpWebResponse ftpWebResponse = (FtpWebResponse)ftpWebRequest.GetResponse(); ftpWebResponse.Close(); ftpWebRequest.Abort(); } catch (Exception exception) { throw new Exception(exception.Message); }}3、上传示例/// <summary>/// 上传/// </summary>/// <param name='remoteFileName'>上传劳动器后储存的文献</param>/// <param name='localFileName'>上传的腹地文献</param>public void Upload(string remoteFileName, string localFileName){ try { if (!File.Exists(localFileName)) { throw new Exception($'{localFileName}文献不存在!'); } // string uri = $'{this.Host}:{this.Port}/{remoteFileName}'; // 创建 FTP 苦求 FtpWebRequest ftpWebRequest = (FtpWebRequest)FtpWebRequest.Create(uri); // 提供FTP 登录信息 ftpWebRequest.Credentials = new NetworkCredential(this.UserName, this.Password); // 指定文献传输的数据类型 ftpWebRequest.UseBinary = true; // 客诞生户端专揽设施的数据传输进程的活动 ftpWebRequest.UsePassive = true; // 指定苦求完成之后是否关闭畅达 ftpWebRequest.KeepAlive = true; // 苦求上传文献步履 ftpWebRequest.Method = WebRequestMethods.Ftp.UploadFile; // 上传数据至FTP劳动器的数据流 using (Stream fileStream = ftpWebRequest.GetRequestStream()) { // 读取腹地上传文献的数据流 using (FileStream localFileStream = new FileStream(localFileName, FileMode.Open)) { // 上传数据的缓冲区 byte[] byteBuffer = new byte[bufferSize]; // 读取数据流 int bytesSent = localFileStream.Read(byteBuffer, 0, bufferSize); // 通过写入缓冲数据上传文献,直到传输完成 while (bytesSent != 0) { fileStream.Write(byteBuffer, 0, bytesSent); bytesSent = localFileStream.Read(byteBuffer, 0, bufferSize); } } } ftpWebRequest.Abort(); } catch (Exception exception) { throw new Exception(exception.Message); }}4、示例调用:
List<string> result = fTPClient.GetDirectorys('');// 创建FTP目次if (!result.Contains('Video')){ fTPClient.CreateDirectory('Video');}string videoSubdir = $'{DateTime.Now:yyyyMMdd}';result = fTPClient.GetDirectorys('Video/');if (!result.Contains(videoSubdir)){ //// 按日历创建子目次 fTPClient.CreateDirectory($'Video/{videoSubdir}');}string remotePath = $'Video/{DateTime.Now:yyyyMMdd}';// 文献名string remoteFilename = '20240501233402.mp4';// 上传文献fTPClient.Upload($'{remotePath}/{remoteFilename}', @'C:\Users\fountyuan\Desktop\20240501233402.mp4');// 下载文献fTPClient.Download($'{remotePath}/{remoteFilename}', @'C:\Users\fountyuan\Desktop\download', '20240501233402.mp4');注:FtpWebRequest、FtpWebResponse在高版块的.NET里被标识为过期。小结以上是FTP上传下载示例的一齐实际,但愿对有需要的列位能带来匡助。如有不到之处,请多多见原。 本站仅提供存储劳动,整个实际均由用户发布,如发现存害或侵权实际,请点击举报。
栏目分类