Подтвердить что ты не робот

Как получить размер файла в Elixir?

Учитывая путь к файлу на диске, какой самый идиоматический способ получить размер файла в байтах?

path = "/tmp/some_file.txt"
4b9b3361

Ответ 1

Это достигается в Elixir, используя встроенные функции stat в модуле File; здесь я расскажу о двух: File.stat/2 и File.stat!/2.

Обе функции возвращают структуру %File.Stat{} для своего "значения", которую мы затем разрушаем с помощью сопоставления с образцом, чтобы вырвать поле size, которое содержит размер файла в байтах. Функции отличаются только тем, как они 1) возвращаются и 2) обрабатывают исключения (например, файл не найден).

Для проверки размера файла, которые генерируют исключения (File.Error):

iex(1)> %{size: size} = File.stat! path
1562

Для проверки размера файла, которые обрабатывают исключения изящно и возвращают кортеж ошибок:

iex(1)> case File.stat path do
...(1)>   {:ok, %{size: size}} -> size
...(1)>   {:error, reason} -> ... # handle error
...(1)> end
1562

NB. Существуют другие функции, которые обрабатываются несколько иначе при работе с символическими ссылками и заслуживают внимания: File.lstat/2 и File.lstat!/2.