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.
Last Post!
NobbZ
You are right, this function still does require a char list (atoms/nested list), and no there is no automatic conversion between elixir strings or char lists.
Popular in Questions
Other popular topics
Categories:
Sub Categories:
Forums
Popular Tags
- #ecto
- #liveview
- #troubleshooting
- #learning-elixir
- #deployment
- #library
- #erlang
- #testing
- #genserver
- #mix
- #absinthe
- #remote-other
- #otp
- #plug
- #how-to-question
- #macros
- #postgres
- #channels
- #elixirconf
- #exunit
- #discussion
- #code-sync
- #javascript
- #podcasts
- #onsite
- #dialyzer
- #docker
- #authentication
- #umbrella
- #full-time-contract
- #podcasts-by-brainlid
- #ecto-query
- #elixir-ls
- #phoenix_html
- #iex
- #blog-post
- #graphql
- #genstage
- #ai
- #websockets
- #supervisor
- #elixirconf-us
- #advent-of-code
- #distillery
- #processes
- #forms
- #api
- #metaprogramming
- #hex
- #security









