![](/img/trans.png)
[英]How to get file properties (Created and Modified) from files in a .NET ZipPackage?
[英]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.