我有一个包含zip文件的FTP,并且每个zip文件都有一个与zip文件同名的xml文件。
我想读这些xml文件。
我做了几乎所有的事情,但现在我有一个问题,这不是一个语法问题,而是一个方法问题。
我应该将这些zip fiels下载到FTP文件夹之外的文件夹吗?然后解析其中的xml文件?
或者有一种更好的方法可以直接访问xml文件而无需下载zip文件。
答案 0 :(得分:2)
您可以仅在内存上打开和解压缩zip条目,您可以下载该文件并将其保存在MemoryStream
上,然后将其传递给ZipArchive
(或者直接通过FTP Stream,但我不能#39;推荐它)。这是在Memory上打开一个zip容器的一个小例子:
var ms = new MemoryStream(file);
var archive = new ZipArchive(ms, ZipArchiveMode.Read);
var entry=archive.GetEntry("Sample.XML");
var doc=XDocument.Load(entry.Open());
以下是从FTP主机下载zip存档并打开其条目的完整示例,我使用ftp.dll
库进行FTP通信,您可以从nuget通过
PM> Install-Package Ftp.dll
是图像文件(banner.jpg)的Stream
,但打开XML文件将是相同的(如上所述);
var ms = new MemoryStream();
var ftp = new Limilabs.FTP.Client.Ftp();
ftp.Connect("ftp.microsoft.com");
ftp.Login("anonymous");
ftp.Download("softlib/MSLFILES/aspwebwiz2k.zip", ms);
var archive = new ZipArchive(ms, ZipArchiveMode.Read);
var entry=archive.GetEntry("banner.jpg");
答案 1 :(得分:0)
如果通过"没有下载"你的意思是不将它们保存在你的系统上并直接阅读它们,然后是的,有一种方法可以做到这一点。 如果它意味着甚至没有将它下载到您的系统中并直接单独阅读服务器上存在的zip内容,那么根据我的知识,没有。
如果前者是您的意思,那么您可以将内容下载到临时内存中,您可以通过MemoryStream类访问该内容并直接从那里读取内容,而无需将其保存在您的系统或硬盘中