[英]XML file from ZIP Archive is incomplete in C#
我处理过存储在 ZIP 存档中的大型 XML 文件(~1000000 行,34mb)。 XML 文件在运行时用于存储和加载应用程序设置和测量值。 加载了这个 function:
public static void LoadFile(string path, string name)
{
using (var file = File.OpenRead(path))
{
using (var zip = new ZipArchive(file, ZipArchiveMode.Read))
{
var foundConfigurationFile = zip.Entries.First(x => x.FullName == ConfigurationFileName);
using (var stream = new StreamReader(foundConfigurationFile.Open()))
{
var xmlSerializer = new XmlSerializer(typeof(ProjectConfiguration));
var newObject = xmlSerializer.Deserialize(stream);
CurrentConfiguration = null;
CurrentConfiguration = newObject as ProjectConfiguration;
AddRecentFiles(name, path);
}
}
}
}
这在大多数时间都有效。 但是,有些文件没有读到最后,我得到一个错误,该文件包含无效的 XML。我用过
foundConfigurationFile.ExtractToFile();
并发现读取的文件停在 ~800000 行。 但这只发生在这段代码中。 当我通过编辑器打开文件时,一切都在那里。 看起来 zip 没有正确加载,或者就此而言,没有完全加载。 我是否有一些限制? 或者我的代码中是否存在我没有发现的错误?
该文件通过以下方式保存:
using (var file = File.OpenWrite(Path.Combine(dirInfo.ToString(), fileName.ToString()) + ".pwe"))
{
var zip = new ZipArchive(file, ZipArchiveMode.Create);
var configurationEntry = zip.CreateEntry(ConfigurationFileName, CompressionLevel.Optimal);
var stream = configurationEntry.Open();
var xmlSerializer = new XmlSerializer(typeof(ProjectConfiguration));
xmlSerializer.Serialize(stream, CurrentConfiguration);
stream.Close();
zip.Dispose();
}
更新:
问题是 File.OpenWrite() 方法。 如果您尝试使用此方法覆盖文件,如果新文件比旧文件短,则会导致旧文件和新文件混合。 File.OpenWrite() 按照文档中的说明首先截断旧文件
为了正确地做到这一点,有必要使用 File.Create() 方法。 因为此方法首先截断旧文件。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.