繁体   English   中英

附加到ZipPackage中的文件-.NET

[英]Append to a file in ZipPackage - .NET

我有一个zip文件,其中存储了一些文件。 创建并写入数据后,我需要将数据附加到其中的一个文件中。

    public void initFileForAppend(string address)
    {
        if (outFile != null)
        {
            flush();
            closeFile();
        }
        workingFile = address;

        outFile = (ZipPackage)ZipPackage.Open(workingFile, FileMode.Append);
        getStreamForAppend(OUTPUT_DATA_FILE_NAME);
        getStreamForAppend(OFFSETS_FILE_NAME);

    }

并且此函数首次创建了zip文件:

    public override void initFile(string address)
    {
        if (outFile != null)
        {
            flush();
            closeFile();
        }
        workingFile = address;

        outFile = (ZipPackage)ZipPackage.Open(workingFile, FileMode.Create, FileAccess.ReadWrite);

        getNewStream(OUTPUT_DATA_FILE_NAME);
        getNewStream(OFFSETS_FILE_NAME, MediaTypeNames.Text.Plain);
        getNewStream(SCENARIO_FILE_NAME, MediaTypeNames.Text.Xml);
    }

ZipPackage.Open...initFileForAppend抛出该异常:

System.ArgumentException was unhandled by user code
  HResult=-2147024809
  Message=Append access can be requested only in write-only mode.
  Source=mscorlib
  StackTrace:
       at System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, Int32 rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions options, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy, Boolean useLongPath, Boolean checkHost)
       at System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize, FileOptions options, String msgPath, Boolean bFromProxy)
       at System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize, Boolean useAsync)
       at MS.Internal.IO.Zip.ZipArchive.OpenOnFile(String path, FileMode mode, FileAccess access, FileShare share, Boolean streaming)
       at System.IO.Packaging.ZipPackage..ctor(String path, FileMode mode, FileAccess access, FileShare share, Boolean streaming)
       at System.IO.Packaging.Package.Open(String path, FileMode packageMode, FileAccess packageAccess, FileShare packageShare, Boolean streaming)
       at System.IO.Packaging.Package.Open(String path, FileMode packageMode)
       at SEWS.History.HistoryWriterEngine.initFileForAppend(String address) in e:\Radari\Phase 2\SEWS 2012\trunk\SEWS\History\HistoryWriterEngine.cs:line 46
       at SEWS.MainForm.simulationStartPause() in e:\Radari\Phase 2\SEWS 2012\trunk\SEWS\MainForm.cs:line 539
       at SEWS.MainForm.bgwSimulation_RunWorkerCompleted(Object sender, RunWorkerCompletedEventArgs e) in e:\Radari\Phase 2\SEWS 2012\trunk\SEWS\MainForm.cs:line 1336
       at System.ComponentModel.BackgroundWorker.OnRunWorkerCompleted(RunWorkerCompletedEventArgs e)
       at System.ComponentModel.BackgroundWorker.AsyncOperationCompleted(Object arg)
  InnerException: 

我试着用FileAccess.ReadWrite作为第三个参数ZipPackage.Open...initFileForAppend ,但它并没有帮助。

PS:我不想只使用第3方库来重写整个代码。 我更喜欢在.NET库中使用ZipPackage

我认为,由于zip算法的工作方式,您必须将文件解压缩,添加到文件然后重新压缩。 如果我错了纠正我。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM