gpt4 book ai didi

c# - 读取 zip 包中 xml 文件的内容

转载 作者:行者123 更新时间:2023-11-30 20:24:04 26 4
gpt4 key购买 nike

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

我尝试使用字符串 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);
}
}
}
}
}

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

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

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

最佳答案

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

using (Stream stream = entry.Open())
{
metaDataStream = stream;
}

...流将被处理。这就是 using 语句的要点。您应该可以使用这种 代码,但是在流打开时加载 XML 文件:

XDocument doc;
using (Stream stream = entry.Open())
{
doc = XDocument.Load(stream);
}

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

string text;
using (Stream stream = entry.Open())
{
using (StreamReader reader = new StreamReader(stream))
{
text = reader.ReadToEnd();
}
}

再一次,注意它是如何读取 before 它到达任一个 using 语句的末尾。

关于c# - 读取 zip 包中 xml 文件的内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27508822/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com