2017-09-14 4 views
-1

Je veux extraire un fichier .rar dans un dossier en utilisant C++ avec zlib.C++ extrait le dossier winrar en utilisant zlib.h

Mon code:

int main(){ 
    gzFile infile = gzopen("C:\\Users\\Nico\\Desktop\\a.rar", "rb"); 
    FILE *outfile = fopen("C:\\Users\\Nico\\Desktop\\ToThisFolder", "wb"); 

    if (!infile || !outfile) { 
     return -1; 
    } 

    char buffer[128]; 
    int num_read = 0; 
    while ((num_read = gzread(infile, buffer, sizeof(buffer))) > 0) { 
     fwrite(buffer, 1, num_read, outfile); 
    } 

    gzclose(infile); 
    fclose(outfile); 
} 

Si je lance le code, mon programme va toujours revenir -1, parce qu'il n'accepte pas le fichier de sortie.

Si vous regardez à mon outfile, je veux mettre la sortie dans un dossier.

Comment est-ce que je peux faire ceci?

ThecCode est de http://www.codeguru.com/cpp/cpp/algorithms/compression/article.php/c11735/zlib-Add-Industrial-Strength-Compression-to-Your-CC-Apps.htm

Merci

+0

Est-ce que zlib gère les fichiers rar? Je m'attendrais à des fichiers .gz mais pas à des rar. – drescherjm

+0

il ne doit pas être un fichier rar. – PhyToniC

+0

Pourquoi est-il nommé 'a.rar' s'il s'agit d'un fichier gzip? Juste un mauvais exemple ?? – drescherjm

Répondre

0

Vous ne pouvez pas utiliser fopen() pour ouvrir un dossier, seul un fichier. Ainsi, outFile est NULL.

Pour extraire un fichier RAR (ou tout autre format d'archive) dans un dossier, vous devez ouvrir l'archive et énumérer ses fichiers stockés, en les extrayant individuellement dans un fichier ouvert distinct. Cela dit, vous ne pouvez pas utiliser la bibliothèque ZLib pour traiter les archives RAR. Cela signifie que vous ne pouvez pas utiliser la bibliothèque ZLib pour traiter les archives RAR. Il ne supporte que les fichiers ZLib et GZip. Vous avez besoin d'une bibliothèque qui supporte réellement RAR, telle que celle fournie par WinRAR, 7-Zip, etc.