读取zip包中xml文件的内容

use*_*159 2 c# zipfile

我需要使用Stream读取.xml文件的内容(此处zip包中存在xml文件)。在下面的代码中,我需要在运行时获取文件路径(在这里,我已硬编码该路径以供参考)。请让我知道如何在运行时读取文件路径。

我试图使用字符串s = entry.FullName.ToString(); 但收到错误“找不到路径”。我也尝试过硬编码路径,如下所示。但是会出现相同的FileNotFound错误。

string metaDataContents;
using (var zipStream = new FileStream(@"C:\OB10LinuxShare\TEST1\Temp" + "\\"+zipFileName+".zip", FileMode.Open))
using (var archive = new ZipArchive(zipStream, ZipArchiveMode.Read))
{
    foreach (var entry in archive.Entries)
    {
        if (entry.Name.EndsWith(".xml"))
        {
            FileInfo metadataFileInfo = new FileInfo(entry.Name);
            string metadataFileName = metadataFileInfo.Name.Replace(metadataFileInfo.Extension, String.Empty);
            if (String.Compare(zipFileName, metadataFileName, true) == 0)
            {
                using (var stream = entry.Open())
                using (var reader = new StreamReader(stream))
                {
                    metaDataContents = reader.ReadToEnd();
                    clientProcessLogWriter.WriteToLog(LogWriter.LogLevel.DEBUG, "metaDataContents : " + metaDataContents);
                }
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我还尝试使用Stream对象来获取.xml文件的内容,如下所示。但是在这里我得到了错误“流不可读”。

Stream metaDataStream = null;
string metaDataContent = string.Empty;
using (Stream stream = entry.Open())
{                                
    metaDataStream = stream;
}
using (var reader = new StreamReader(metaDataStream))
{
    metaDataContent = reader.ReadToEnd();
}
Run Code Online (Sandbox Code Playgroud)

请建议如何通过在运行时指定文件路径来使用Stream和StreamReader使用zip文件读取xml的内容

Jon*_*eet 5

您的部分代码段失败,因为当您到达第一条using语句的末尾时:

using (Stream stream = entry.Open())
{                                
    metaDataStream = stream;
}
Run Code Online (Sandbox Code Playgroud)

...流将被处置。这就是using陈述的重点。你应该罚款与此排序的代码,但在流是开放加载XML文件:

XDocument doc;
using (Stream stream = entry.Open())
{                                
    doc = XDocument.Load(stream);
}
Run Code Online (Sandbox Code Playgroud)

那就是将其加载为XML ...如果您真的只想要文本,则可以使用:

string text;
using (Stream stream = entry.Open())
{                                
    using (StreamReader reader = new StreamReader(stream)
    {
        text = reader.ReadToEnd();
    }
}
Run Code Online (Sandbox Code Playgroud)

再次强调,这不是任何一条using语句的末尾读到的内容。