2011-09-28 63 views
1

我使用C#這個代碼的zip文件。我需要打開Android應用中這些文件(JAVA):我用來製作.zip文件的代碼是否正確?

String mp3Files = "E:\\"; 
int TrimLength = mp3Files.ToString().Length; 

byte[] obuffer; 
string outPath = mp3Files + "\\" + i + ".zip"; 
ZipOutputStream oZipStream = new ZipOutputStream(File.Create(outPath)); // create zip stream 
oZipStream.SetLevel(9); // maximum compression 

foreach (string Fil in ar) // for each file, generate a zipentry 
{ 

    oZipEntry = new ZipEntry(Fil.Remove(0, TrimLength)); 
    oZipStream.PutNextEntry(oZipEntry); 

    if (!Fil.EndsWith(@"/")) // if a file ends with '/' its a directory 
    { 
     ostream = File.OpenRead(Fil); 
     obuffer = new byte[ostream.Length]; 
     ostream.Read(obuffer, 0, obuffer.Length); 
     oZipStream.Write(obuffer, 0, obuffer.Length); 
    } 
} 
oZipStream.Finish(); 
oZipStream.Close(); 

我有在Java中提取這些文件的問題,我想確保問題不是來自zip文件文件..所以這段代碼是否正確? Java可以讀取這些zip文件嗎?

我試着建立正常使用WinRAR和文件提取碼給出了同樣的問題..問題是,「zin.getNextEntry()」總是空:

String zipFile = Path + FileName; 


      FileInputStream fin = new FileInputStream(zipFile); 
      ZipInputStream zin = new ZipInputStream(fin); 

      ZipEntry ze = null; 
      while ((ze = zin.getNextEntry()) != null) { 
       UnzipCounter++; 
       if (ze.isDirectory()) { 
        dirChecker(ze.getName()); 
       } else { 
        FileOutputStream fout = new FileOutputStream(Path 
          + ze.getName()); 
        while ((Unziplength = zin.read(Unzipbuffer)) > 0) { 
         fout.write(Unzipbuffer, 0, Unziplength);      
        } 
        zin.closeEntry(); 
        fout.close(); 

       } 

      } 
      zin.close(); 
+4

爲什麼不手動創建一個zip文件並用它測試java提取。如果那有效,那麼你的創作可能是錯誤的。 –

+2

您是否嘗試過在WinZip或7zip中打開zip文件?它工作嗎? –

+1

在C#中,你應該在你的一次性物品周圍使用''use'塊。 – Aren

回答

0

你的問題可能是由於到FileInputStream對象的模式。 This link (has C# code)指出流必須可讀。嘗試根據他們的建議更改您的代碼。從他們的網站上發佈的部分代碼:

using (var raw = File.Open(inputFileName, FileMode.Open, FileAccess.Read)) 
{ 
    using (var input= new ZipInputStream(raw)) 
    { 
     ZipEntry e; 
     while ((e = input.GetNextEntry()) != null) 
     { 
+0

此代碼解壓縮文件..我想壓縮在C#中,並解壓縮在Java中.. – Omar

0

從dicussion我們對this question,您的條目的大小被設置爲4294967295,這是您遇到的解壓縮問題的原因在Java中。嘗試設置大小:

FileInfo fi = new FileInfo(Fil); // added this line here 
oZipEntry = new ZipEntry(Fil.Remove(0, TrimLength)); 
oZipEntry.Size = fi.Length;    // added this line here 
oZipStream.PutNextEntry(oZipEntry); 

道歉,如果語法不正確,這是未經測試的。

+0

我用過,但我得到的錯誤:「[ICSharpCode.SharpZipLib。 Zip.ZipException] = {「大小是85985,但我期望32」}「 – Omar

+0

編輯:您需要使用文件的大小,而不是文件名的大小。道歉。 –

+0

我把你的新代碼,之前和現在在.zip大小之間有一個小的區別..我有非常奇怪的結果..有時它通常解壓縮,有時它沒有,有時它解壓縮部分zip文件:(....我只是試圖降低壓縮(oZipStream.SetLevel(4);)的水平,現在它解壓縮 – Omar

相關問題