Hris
Make a zip file in Elixir
Hello.
I have a text file and I want to make a zip file from it using Elixir or just to compress its folder.
files = File.ls!("path")
|> Enum.map(fn filename -> Path.join("path", filename) end)
|> Enum.map(&String.to_charlist/1)
I then use :zip.create("foo.zip", files) to write the zip file. It returns a tuple: {:ok, "foo.zip"} but the file does not get saved.
Where is my mistake? Or can I get some sort of a solution? Thanks.
Marked As Solved
lackac
According to the Erlang docs on :zip.create/3 there is an optional third argument with options where you could set the working directory for compression with [cwd: path]. The effect is that files will be looked up within that path and will omit the path in the compressed file.
Expanding on your example:
files =
File.ls!(path)
|> Enum.map(&String.to_charlist/1)
:zip.create("files.zip", files, cwd: path)
$ unzip -l files.zip
Archive: files.zip
Length Date Time Name
--------- ---------- ----- ----
212151 09-22-2016 17:32 file1.txt
333814 09-22-2016 17:32 file2.txt
269066 09-22-2016 17:32 file3.txt
333736 09-22-2016 17:32 file4.txt
284213 09-22-2016 17:32 file5.txt
--------- -------
1432980 5 files
Also Liked
NobbZ
The file is created in the working dir of the running BEAM VM, you can check with System.cwd/0.
Qqwy
And usually this is the folder that your ‘mix.exs’ is also in. If you are running in development that is.
When you have made a release, the folder location might be different.







