2013-05-05 121 views
1

對於一個項目必須閱讀一些zip文件。 一切都是okey,但是當想要從zip文件中的文件夾中讀取 它不起作用。或者我只是不知道在C++中zip如何工作。 ive在互聯網上搜索了全部內容,找不到答案。如何用minizip讀取子文件夾中的文件

+1

我真的不明白你的問題,但我的猜測是你正在嘗試編寫一個C++程序來打開檔案內的文件? – TheEmeritus 2013-05-05 15:56:12

+0

是的,並在該檔案中我有一些文件夾與我想提取的數據 – user389006 2013-05-05 16:11:51

回答

5

據我所知,以前使用minizip時,文件夾層次結構中的所有文件都會同時返回。您只需比較每個文件的路徑名稱即可找出哪些文件與要讀取的文件夾匹配。

zipFile zip = unzOpen(zipfilename); 
if (zip) { 
    if (unzGoToFirstFile(zip) == UNZ_OK) { 
    do { 
     if (unzOpenCurrentFile(zip) == UNZ_OK) { 
     unz_file_info fileInfo; 
     memset(&fileInfo, 0, sizeof(unz_file_info)); 

     if (unzGetCurrentFileInfo(zip, &fileInfo, NULL, 0, NULL, 0, NULL, 0) == UNZ_OK) { 
      char *filename = (char *)malloc(fileInfo.size_filename + 1); 
      unzGetCurrentFileInfo(zip, &fileInfo, filename, fileInfo.size_filename + 1, NULL, 0, NULL, 0); 
      filename[fileInfo.size_filename] = '\0'; 

      // At this point filename contains the full path of the file. 
      // If you only want files from a particular folder then you should compare 
      // against this filename and discards the files you don't want. 
      if (matchFolder(filename)) { 
      unsigned char buffer[4096]; 
      int readBytes = unzReadCurrentFile(zip, buffer, 4096); 
      // Do the rest of your file reading and saving here. 
      } 

      free(filename); 
     } 

     unzCloseCurrentFile(zip); 
     } 
    } while (unzGoToNextFile(zip) == UNZ_OK); 
    } 
    unzClose(zip); 
} 

我沒有在時刻來測試這個代碼的能力,所以有可能會出現一些錯誤,但我希望你能看到的應該是如何工作的總體思路。

+0

作品像魅力謝謝。 – user389006 2013-05-05 17:42:26

相關問題