包部分复制到文件或内存

本文关键字:内存 文件 复制 包部 | 更新日期: 2023-09-27 18:12:15

我想提取一个xlsx文件以获得sheet1.xml文件。现在我正在与包和PackagePart作斗争。我认为最明显的方法是读取该特定文件并将内容复制到XmlDocument这是我到目前为止的记录:

XmlDocument doc = new XmlDocument();
using (Package package = ZipPackage.Open(xlsFile, FileMode.Open, FileAccess.Read))
{
     foreach (PackagePart part in package.GetParts())
     {
         var target = Path.GetFullPath(Path.Combine(tempFolderPath, part.Uri.OriginalString.TrimStart('/')));
         var targetDir = target.Remove(target.LastIndexOf(''''));
         if (!Directory.Exists(targetDir))
             Directory.CreateDirectory(targetDir);
         using (Stream source = part.GetStream(FileMode.Open, FileAccess.Read))
         {
             FileStream targetFile = File.OpenWrite(target);
             byte[] bytes = new byte[source.Length];
             source.Read(bytes, 0, (int)source.Length);
             source.Close();
             //source.CopyTo(targetFile);
             //doc.Load(source.Write());
             //targetFile.Close();
         }
    }
}

我正在使用。net 3.5,所以我不能使用流source.CopyTo方法。我想复制Sheet1.xml的内容到XmlDocument类的文档..

谢谢!保罗

包部分复制到文件或内存

您可以使用XmlDocument.Load过载,这需要一个Stream:

XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load(part.GetStream(FileMode.Open, FileAccess.Read));

加载后,可以使用XmlDocument.Save:

xmlDoc.Save(target);