bower / decompress-zip

Module that decompresses zip files
MIT License
102 stars 76 forks source link

can't call the unzipper.extract from callback of unzipper.on('list', cb) #60

Open trosemann opened 6 years ago

trosemann commented 6 years ago

I want to decompress my archive only if there is a certain file inside. So i call unzipper.list() and check the files in unzipper.on('list')

unzipper.on('list', (files) => { if(fileFound(files){ unzipper.extract({path: folderPath}); }) });

If I do it like that, I got the following error: "fd must be a file descriptor"

If I just call unzipper.extract() from outside the 'list' event, it works fine.

lfwells commented 4 years ago

I had the same problem. Not sure why, but creating a new DecompressZip object inside the list event fixed it (maybe calling list breaks the internal state of the object?). Not ideal obviously, and a bandaid solution, but worth a shot to anyone else who comes across this. Sample code:

`var unzipper = new DecompressZip(filepath);

    //first check the existence of the required files
    unzipper.on('list', function(files)
    {
        console.log("zip files:", files);
        //files are there, lets unzip!
        if (files.indexOf("html/index.html") != -1)
        {
            var unzipper = new DecompressZip(filepath);
            unzipper.on("extract", function () 
            {
                //file unzipped, now to handle the folder
                if (handleZip(extractPath, res))
                {
                    //success!
                }
            });
            unzipper.extract({ path: extractPath });
        }
        else
        {
            //return error etc 
        }
    });

    unzipper.list(); `