Skip to content

Files

Latest commit

Jun 13, 2018
b8c9b4a · Jun 13, 2018

History

History
159 lines (99 loc) · 6.01 KB

moyo_file.md

File metadata and controls

159 lines (99 loc) · 6.01 KB

Module moyo_file

ファイル関連の処理を集めたユーティリティモジュール.

Copyright (c) 2013-2014 DWANGO Co., Ltd. All Rights Reserved.

Function Index

close/1{error, _} が返ってきた時にエラーを発生させる版の file:close/1 です.
delete_directory/2指定ディレクトリを削除する.
delete_if_exists/1ファイルを削除する.
get_disk_usage/1指定パスのディスク使用量を取得する.
get_disk_usage_async/3指定パスのディス使用量を非同期に取得する.
make_temp_filepath/0Equivalent to make_temp_filepath(<<"">>).
make_temp_filepath/1ユニークな一時ファイルパスを生成して返す.
open/2{error, _} が返ってきた時にエラーを発生させる版の file:open/2 です.
write/2{error, _} が返ってきた時にエラーを発生させる版の file:write/2 です.
write_or_close/2{error, _} が返ってきた時にファイルを閉じてエラーを発生させる版の file:write/2 です.

Function Details

close/1


close(IoDevice::file:io_device()) -> ok

{error, _} が返ってきた時にエラーを発生させる版の file:close/1 です.

delete_directory/2


delete_directory(DirectoryPath::file:name_all(), Recursive::boolean()) -> ok | {error, Reason::term()}

指定ディレクトリを削除する.

Recursivetrueが指定された場合は、ディレクトリの子要素を含めて再帰的に削除処理を実行する.
なお、指定ディレクトリが存在しない場合はokが返される.

delete_if_exists/1


delete_if_exists(FilePath::file:name_all()) -> ok

ファイルを削除する. 失敗したらエラーが発生するが, ファイルがない時はエラーは起きず ok を返す.

(補足)file:delete はファイルがないと {error, enoent} を返すが, この関数はそのような場合何もしないで ok を返す.

get_disk_usage/1


get_disk_usage(Path::file:name_all()) -> {ok, UsageBytes::non_neg_integer()} | {error, Reason::term()}

指定パスのディスク使用量を取得する.

対象パスが存在しない場合は{ok, 0}が返る.

get_disk_usage_async/3


get_disk_usage_async(Path::file:name_all(), Pid::pid(), Tag::term()) -> ok

指定パスのディス使用量を非同期に取得する.

容量取得処理が終了したタイミングでPidプロセスに{Tag, get_disk_usage(Path)}形式のメッセージが送信される.

make_temp_filepath/0


make_temp_filepath() -> Path::binary()

Equivalent to make_temp_filepath(<<"">>).

make_temp_filepath/1


make_temp_filepath(Prefix::binary()) -> Path::binary()

ユニークな一時ファイルパスを生成して返す.

生成されるパスの形式は/tmp/Prefix_ユニークな文字列となる.

なお、この関数自体はファイルの作成を行わないため、以下のように一時ファイルパスの生成から、 実際のファイル作成までの間に、他のプロセスとの競合が発生する可能性があるので注意が必要.

  %% 1] 一時ファイルパスを生成 (この時点ではユニーク)
  > Path = make_temp_filepath().
   
  %% 2] ここで他のプロセスが偶然同じファイル名を使用して file:write_file/2 を呼び出した
   
  %% 3] Pathにデータを書き込み
        => 他のプロセスが書き込んだ内容を上書きしてしまう!
  > file:write_file(Path, <<"data">>).

open/2


open(File::file:name_all(), Modes::[Mode]) -> file:io_device()
  • Mode = term()

{error, _} が返ってきた時にエラーを発生させる版の file:open/2 です.

write/2


write(IoDevice::file:io_device(), Bytes::iodata()) -> ok

{error, _} が返ってきた時にエラーを発生させる版の file:write/2 です.

write_or_close/2


write_or_close(IoDevice::file:io_device(), Bytes::iodata()) -> ok

{error, _} が返ってきた時にファイルを閉じてエラーを発生させる版の file:write/2 です.