2013-01-22 83 views
2

我遇到了一些问题! 我使用DotNetZip库在c#上制作一个自制的Minecraft启动器。 因此,这个启动器有一个更新选项,它从服务器上下载一个.zip文件,并将所有文件从zip文件中提取到minecraft.jar中!但是一个错误指出“该文件已经存在”,或者它创建了一个名为minecraft.jar的文件夹...... 有没有一种可能的方法将zip压缩文件中的文件直接提取到其他zip压缩文件中? (因为一个.jar是为.zip几乎相同) 这里是下载和extraxt代码(不要奇怪回合一些文本的这是在德国):将文件从zip压缩到jar文件中

private void button3_Click(object sender, EventArgs e) 
{ 
    progressBar1.Visible = true; //Dient nur zur Deko 
    label1.Text = "Download......"; 
    WebClient webClient = new WebClient(); 
    webClient.DownloadFileCompleted += new AsyncCompletedEventHandler(Completed); 
    webClient.DownloadProgressChanged += new DownloadProgressChangedEventHandler(ProgressChanged); 
    webClient.DownloadFileAsync(new Uri("https://dl.dropbox.com/u/97421059/Test.zip"), @"Test.zip"); //Der Link sollte für die Zukünftigen Versionen immer gleich sein! 
    button3.Visible = false; 

} 


private void Completed(object sender, AsyncCompletedEventArgs e) 
{ 
    label1.Text = "Entpacken....."; //In der Box 
    progressBar1.Visible = false; 
    button3.Visible = true; 
    MessageBox.Show("Download abgeschlossen!!\n\rBitte warte bis der Launcher die Dateien entpackt hat."); // Erklärt sich von selbst 
    string ExistingZipFile = @"Test.zip"; 
    string sourceDir = AppDomain.CurrentDomain.BaseDirectory; 
    string TargetDirectory = (sourceDir + "minecraft.jar"); 
    using (ZipFile zip = ZipFile.Read(ExistingZipFile)) 
    { 


     // ab hier komm der restliche script 
     // bei dem man eig. nix einstellen soll 
     foreach (ZipEntry ze in zip) 
     { 
      ze.Extract(TargetDirectory, ExtractExistingFileAction.OverwriteSilently); 

     } 
     MessageBox.Show("Entpacken der Dateien abgeschlossen!"); 
     label1.Text = "Entpacken abgeschlossen!"; 
    } 


} 

我粘贴GemHunter1代码后(我希望我在正确的位置填写姓名),我没有错误,但在minecraft.jar仍然是来自downloadet拉链

private void Completed(object sender, AsyncCompletedEventArgs e) 
{ 
    label1.Text = "Entpacken....."; //In der Box 
    progressBar1.Visible = false; 
    button3.Visible = true; 
    MessageBox.Show("Download abgeschlossen!!\n\rBitte warte bis der Launcher die Dateien entpackt hat."); // Erklärt sich von selbst 
    string ExistingZipFile = @"Test.zip"; 
    string sourceDir = AppDomain.CurrentDomain.BaseDirectory; 
    string TargetDirectory = (sourceDir + "minecraft.jar"); 
    using (ZipFile zip = ZipFile.Read(ExistingZipFile)) 
    { 


     // ab hier komm der restliche script 
     // bei dem man eig. nix einstellen soll 
     if (zip.ContainsEntry("Test.zip")) 
     { 
      zip.RemoveEntry("Test.zip"); 
     } 
     MessageBox.Show("Entpacken der Dateien abgeschlossen!"); 
     label1.Text = "Entpacken abgeschlossen!"; 
    } 


} 
+0

它在哪里?它是'In der Box' –

+0

也许这就是为什么Minecraft有一个叫做Enderman的生物。这是恩德,男人。 – AaronLS

回答

2

好了,我为你的代码...

if (Directory.Exists(temp)) 
    { 
     Directory.Delete(temp, true); 
     Directory.CreateDirectory(temp); 
    } 
    using (ZipFile jar = ZipFile.Read(appdata + "\\.minecraft\\bin\\minecraft.jar")) 
    { 
     using (ZipFile zip = ZipFile.Read(ExistingZipFile)) 
     { 
      zip.ExtractAll(temp, ExtractExistingFileAction.OverwriteSilently); 
     } 
     foreach (string file in Directory.GetFiles(temp)) 
     { 
      if (jar.ContainsEntry(file)) 
      { 
       jar.RemoveEntry(file); 
      } 
      jar.AddFile(file, "\\"); 
     } 
     jar.Save(); 
     MessageBox.Show("Entpacken der Dateien abgeschlossen!"); 
     label1.Text = "Entpacken abgeschlossen!";Solved the problem with this code(thanks to GemHunter1 :D): 
1

编辑任何内容: 使用本:

//filename_you_are_going_to_copy is string with name of file with extension, not full path 
if (zip.ContainsEntry(filename_you_are_going_to_copy)) 
{ 
    zip.RemoveEntry(filename_you_are_going_to_copy); 
} 

编辑2: 上面写这个代码后:

mod.AddFile(filename_you_are_going_to_copy); 
0

问题解决了这段代码(感谢GemHunter1:D):

if (Directory.Exists(temp)) 
    { 
     Directory.Delete(temp, true); 
     Directory.CreateDirectory(temp); 
    } 
    using (ZipFile jar = ZipFile.Read(appdata + "\\.minecraft\\bin\\minecraft.jar")) 
    { 
     using (ZipFile zip = ZipFile.Read(ExistingZipFile)) 
     { 
      zip.ExtractAll(temp, ExtractExistingFileAction.OverwriteSilently); 
     } 
     foreach (string file in Directory.GetFiles(temp)) 
     { 
      if (jar.ContainsEntry(file)) 
      { 
       jar.RemoveEntry(file); 
      } 
      jar.AddFile(file, "\\"); 
     } 
     jar.Save(); 
     MessageBox.Show("Entpacken der Dateien abgeschlossen!"); 
     label1.Text = "Entpacken abgeschlossen!"; 
相关问题