我有一个 C# WinForms .NET 应用程序,我试图在其中写入一个 zip 存档并使用 System.IO.Compression 从中读取。
现在我创建了 ziparchive:
public void SaveStdV20ZipProject(string strfilepath, clsProjectInfo GameInfo)
{
using (var ms = new MemoryStream())
{
using (var archive = new ZipArchive(ms, ZipArchiveMode.Create, true))
{
string strProjectData = String.Empty;
StringBuilder sb = new StringBuilder();
// First, we add the Game Info data...
sb.AppendLine(GameInfo.strGameVersion);
sb.AppendLine(GameInfo.strProjectType);
sb.AppendLine(GameInfo.strGameTitle);
sb.AppendLine(GameInfo.strAuthor);
sb.AppendLine(GameInfo.strCreationDate);
sb.AppendLine(GameInfo.blTSImagePresent.ToString());
sb.AppendLine(GameInfo.blTSAudioPresent.ToString());
sb.AppendLine(GameInfo.blTSVideoPresent.ToString());
sb.AppendLine(GameInfo.blFSSImagePresent.ToString());
sb.AppendLine(GameInfo.blFSSAudioPresent.ToString());
sb.AppendLine(GameInfo.blFSSVideoPresent.ToString());
sb.AppendLine(GameInfo.intTotalQuestions.ToString());
sb.AppendLine(GameInfo.intTotalMediaItems.ToString());
sb.AppendLine(GameInfo.intTotalCategories.ToString());
sb.AppendLine(GameInfo.blTiebreakerPresent.ToString());
// Next, create an archive entry for the Game Data string...
strProjectData = sb.ToString();
var ProjectData = archive.CreateEntry("ProjectData.txt");
using (var entryStream = ProjectData.Open())
using (var streamWriter = new StreamWriter(entryStream))
{
streamWriter.Write(strProjectData);
}
// We're done writing all the data for this project. Now let's write it to the file...
using (var fileStream = new FileStream(@strfilepath, FileMode.Create))
{
ms.Seek(0, SeekOrigin.Begin);
ms.CopyTo(fileStream);
}
}
}
}
这是我打开它的方式:
public void OpenStdV20ZipProject(string strfilepath)
{
string zipPath = strfilepath;
string extractPath = Path.GetTempFileName();
using (ZipArchive archive = ZipFile.OpenRead(zipPath))
{
foreach (ZipArchiveEntry entry in archive.Entries)
{
if (entry.FullName.EndsWith(".txt", StringComparison.OrdinalIgnoreCase))
{
using (StreamReader sr = new StreamReader(extractPath))
{
clsProjInfo.strGameVersion = (string)sr.ReadLine();
clsProjInfo.strProjectType = (string)sr.ReadLine();
clsProjInfo.strGameTitle = (string)sr.ReadLine();
clsProjInfo.strAuthor = (string)sr.ReadLine();
clsProjInfo.strCreationDate = (string)sr.ReadLine();
clsProjInfo.blTSImagePresent = Convert.ToBoolean(sr.ReadLine());
clsProjInfo.blTSAudioPresent = Convert.ToBoolean(sr.ReadLine());
clsProjInfo.blTSVideoPresent = Convert.ToBoolean(sr.ReadLine());
clsProjInfo.blFSSImagePresent = Convert.ToBoolean(sr.ReadLine());
clsProjInfo.blFSSAudioPresent = Convert.ToBoolean(sr.ReadLine());
clsProjInfo.blFSSVideoPresent = Convert.ToBoolean(sr.ReadLine());
clsProjInfo.intTotalQuestions = Convert.ToInt32(sr.ReadLine());
clsProjInfo.intTotalMediaItems = Convert.ToInt32(sr.ReadLine());
clsProjInfo.intTotalCategories = Convert.ToInt32(sr.ReadLine());
clsProjInfo.blTiebreakerPresent = Convert.ToBoolean(sr.ReadLine());
}
}
}
}
} // <-THIS IS LINE 1320
它抛出了一个缺失方法异常,我在 Internet 上到处寻找修复方法。这是堆栈跟踪:
System.MissingMethodException occurred
HResult=0x80131513
Message=Method not found: 'System.IO.Compression.ZipArchive System.IO.Compression.ZipFile.OpenRead(System.String)'.
Source=TASv20ClsLib
StackTrace:
at TASv20ClsLib.clsOpenStandardProject.OpenStdV20ZipProject(String strfilepath) in C:\Users\Reuben\Documents\Visual Studio 2017\Projects\C# Projects\TRIVIA AUTHOR SUITE V20 PROJECTS 2\TAS v20 Zip Test Jun14 2\TASv20ClsLib\Class1.cs:line 1320
at Trivia_Author_v20.frmMain.openV20ProjectToolStripMenuItem_Click(Object sender, EventArgs e) in C:\Users\Reuben\Documents\Visual Studio 2017\Projects\C# Projects\TRIVIA AUTHOR SUITE V20 PROJECTS 2\TAS v20 Zip Test Jun14 2\Trivia Author v10 New Approach\frmMain.cs:line 1627
at System.Windows.Forms.ToolStripItem.RaiseEvent(Object key, EventArgs e)
at System.Windows.Forms.ToolStripMenuItem.OnClick(EventArgs e)
at System.Windows.Forms.ToolStripItem.HandleClick(EventArgs e)
at System.Windows.Forms.ToolStripItem.HandleMouseUp(MouseEventArgs e)
at System.Windows.Forms.ToolStripItem.FireEventInteractive(EventArgs e, ToolStripItemEventType met)
at System.Windows.Forms.ToolStripItem.FireEvent(EventArgs e, ToolStripItemEventType met)
at System.Windows.Forms.ToolStrip.OnMouseUp(MouseEventArgs mea)
at System.Windows.Forms.ToolStripDropDown.OnMouseUp(MouseEventArgs mea)
at System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
at System.Windows.Forms.Control.WndProc(Message& m)
at System.Windows.Forms.ScrollableControl.WndProc(Message& m)
at System.Windows.Forms.ToolStrip.WndProc(Message& m)
at System.Windows.Forms.ToolStripDropDown.WndProc(Message& m)
at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
at System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
at System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG& msg)
at System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(IntPtr dwComponentID, Int32 reason, Int32 pvLoopData)
at System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context)
at System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context)
at System.Windows.Forms.Application.Run(Form mainForm)
at Trivia_Author_v20.Program.Main(String[] args) in C:\Users\Reuben\Documents\Visual Studio 2017\Projects\C# Projects\TRIVIA AUTHOR SUITE V20 PROJECTS 2\TAS v20 Zip Test Jun14 2\Trivia Author v10 New Approach\Program.cs:line 126