0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Node.jsのunzipperで解凍したらファイルが少なかった件

Last updated at Posted at 2024-10-15

はじめに

初めてunzipperを使いました
unzipperの最も基本的な使い方ですが、初歩の初歩で躓いてしまいました
具体的にはZIPを解凍したら解凍先のディレクトリにあるはずのファイルがなかったという感じです
エラーが出ないので一瞬気付きにくいですけど同じ問題起きた人いますか?

問題のソース

fs.createReadStream('test.zip')
  .pipe(unzipper.Extract({ path: 'output' }));

解決したソース

  const directory = await unzipper.Open.file('test.zip');
  await directory.extract({ path: 'output' })

再現

100個ファイルを作成してZIP化する

touch file_{1..100}.txt
zip test.zip file_*

unzipperを使ってZIPを解凍する

fs.createReadStream('test.zip')
  .pipe(unzipper.Extract({ path: 'output' }));

解凍先を開く

$ ls output
file_1.txt   file_100.txt  file_12.txt  file_14.txt  file_16.txt  file_18.txt  file_2.txt   file_21.txt
file_10.txt  file_11.txt   file_13.txt  file_15.txt  file_17.txt  file_19.txt  file_20.txt  file_22.txt

100ファイルあるはずが16ファイルしかない><

おわり

unzipper.Openを使えば良いと思います
公式ドキュメントでもunzipper.Openが上の方に紹介されていますし、fs.createReadStreamを使う方法はどうやら(legacy)と書いてある(?)

補足

調べていくとわかると思うんですがfs.createReadStreamを使う方法だと解凍時ファイルを作成するところで躓いているっぽいです
ディレクトリかファイルか判定してディレクトリを作る処理を明示的に書いてあげれば直りますね

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?