对,所以我有一个装满了其他文件夹的文件夹,这些文件夹被压缩成.gz文件。在这些文件夹中是文本文件。
我希望有一个程序循环遍历这些文本文件,看看它们是否包含特定的字符串,但要做到这一点,我需要首先解压缩它们。我不想开始摆弄文件(除非我可以临时创建它们,然后删除它们),我只想对.gz文件夹的内容执行操作。我尝试过zlib.Gunzip()._outBuffer.toString(),它在压缩文件夹上使用时会给人一种胡言乱语的感觉。
我应该如何继续?
发布于 2020-07-11 19:29:36
最近不得不做一些非常类似的事情,这对我来说是有效的:基本上你只需将文件读入一个buffer,然后你就可以将它传递给gunzip函数。这将返回另一个缓冲区,您可以在该缓冲区上调用toString('utf8')以获取字符串形式的内容,这正是您所需要的:
const util = require('util');
let {gunzip} = require('zlib');
const fs = require('fs');
gunzip = util.promisify(gunzip);
async function getStringFromGzipFile(inputFilePath) {
const sourceBuffer = await fs.promises.readFile(inputFilePath);
return await gunzip(sourceBuffer);
}
(async () => {
const stringContent = await getStringFromGzipFile('/path/to/file');
console.log(stringContent);
})()编辑:
如果你想要压缩并解压一个目录,你可以使用tar-fs,它会将内容解压到指定的目录。处理完其中的文件后,只需删除该目录即可。下面是如何gunzip和提取.tar.gz的方法
function gunzipFolder(sourceDir, destination) {
fs.createReadStream(sourceDir)
.pipe(zlib.createGunzip())
.pipe(tar.extract(destination));
}https://stackoverflow.com/questions/62848348
复制相似问题