当前位置: 首页 > 编程语言 > C#

可以用C#解压FTP服务器上的文件吗?Share

时间:2023-04-10 14:34:19 C#

我们可以用C#解压FTP服务器上的文件吗?我可以在FTP中提取ZIP文件并使用C#将此提取的文件放在同一位置吗?这是不可能的。FTP协议中没有API来解压服务器上的文件。但是,除了FTP访问之外,还拥有SSH访问的情况并不少见。如果是这种情况,您可以连接到SSH并在服务器上执行unzipshell命令(或类似命令)来解压缩文件。请参阅C#发送简单的SSH命令。如果需要,您可以使用FTP协议下载提取的文件(尽管如果您具有SSH访问权限,您也将具有SFTP访问权限。然后,使用SFTP而不是FTP。)。一些(很少)FTP服务器提供API来使用SITEEXEC命令(或类似命令)执行任意shell(或其他)命令。但这真的非常非常罕见。您可以像上面的SSH一样使用此API。通过FTP下载到MemoryStream,然后就可以解压了,例子中展示了如何获取stream,改成MemoryStream解压即可。这些示例不使用MemoryStream,但如果您熟悉流,那么修改这两个示例应该是微不足道的。示例来自:https://docs.microsoft.com/en-us/dotnet/framework/network-programming/how-to-download-files-with-ftpusingSystem;使用System.IO;使用System.Net;使用系统文本;namespaceExamples.System.Net{publicclassWebRequestGetExample{publicstaticvoidMain(){//获取用于与服务器通信的对象。FtpWebRequest请求=(FtpWebRequest)WebRequest.Create("ftp://www.contoso.com/test.htm");request.Method=WebRequestMethods.Ftp.DownloadFile;//本例假设FTP站点使用匿名登录。request.Credentials=newNetworkCredential("anonymous","janeDoe@contoso.com");FtpWebResponse响应=(FtpWebResponse)request.GetResponse();流responseStream=response.GetResponseStream();StreamReaderreader=newStreamReader(responseStream);Console.WriteLine(reader.ReadToEnd());Console.WriteLine("下载完成,状态{0}",response.StatusDescription);读者。关闭();响应.关闭();}}}解压收缩,例如:https://docs.microsoft.com/en-us/dotnet/standard/io/how-to-compress-and-extract-files使用系统;使用System.IO;使用System.IO.Compression;namespaceConsoleApplication{classProgram{staticvoidMain(string[]args){使用(FileStreamzipToOpen=newFileStream(@"c:usersexampleuserrelease.zip",FileMode.Open)){使用(ZipArchivearchive=newZipArchive(zipToOpen,ZipArchiveMode).Update)){ZipArchiveEntryreadmeEntry=archive.CreateEntry("Readme.txt");using(StreamWriterwriter=newStreamWriter(readmeEntry.Open())){writer.WriteLine("关于这个包的信息。");writer.WriteLine("=========================");}}}}}}这是一个从ftp下载的zip文件,解压zip文件,然后压缩文件上传回同一ftp目录的工作示例以上是C#学习教程:CanweuseC#tounzipafilein一个FTP服务器?如果分享的内容对你有用,需要了解更多C#学习教程,希望你多多关注——usingSystem.IO;使用System.IO.Compression;使用System.Net;使用系统文本;namespaceConsoleApp1{classProgram{staticvoidMain(string[]args){字符串位置=@"ftp://localhost";字节[]缓冲区=空;使用(MemoryStreamms=newMemoryStream()){FtpWebRequestfwrDownload=(FtpWebRequest)WebRequest.Create($"{location}/test.zip");fwrDownload.Method=WebRequestMethods.Ftp.DownloadFile;fwrDownload.C??redentials=newNetworkCredential("匿名","janeDoe@contoso.com");using(FtpWebResponseresponse=(FtpWebResponse)fwrDownload.GetResponse())using(Streamstream=response.GetResponseStream()){//压缩数据流//https://stackoverflow.com/a/4924357byte[]buf=new字节[1024];整数字节数;do{byteCount=stream.Read(buf,0,buf.Length);ms.Write(buf,0,byteCount);}while(byteCount>0);//ms.Seek(0,SeekOrigin.Begin);缓冲区=ms.ToArray();}}//包括System.IO.Compression和System.IO.Compression.FileSystem程序集使用(MemoryStreamms=newMemoryStream(buffer))使用(ZipArchivearchive=newZipArchive(ms,ZipArchiveMode.Update)){foreach(ZipArchiveEntryentry在档案中e.Entries){FtpWebRequestfwrUpload=(FtpWebRequest)WebRequest.Create($"{location}/{entry.FullName}");fwrUpload.Method=WebRequestMethods.Ftp.UploadFile;fwrUpload.C??redentials=newNetworkCredential("匿名","janeDoe@contoso.com");byte[]文件内容=null;使用(StreamReadersr=newStreamReader(entry.Open())){fileContents=Encoding.UTF8.GetBytes(sr.ReadToEnd());}if(fileContents!=null){fwrUpload.C??ontentLength=fileContents.Length;尝试{使用(StreamrequestStream=fwrUpload.GetRequestStream()){requestStream.Write(fileContents,0,fileContents.Length);}}catch(WebExceptione){字符串状态=((FtpWebResponse)e.Response).StatusDescription;}}}}}}}本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: