std.file

ファイルの読み書き。任意モジュールなので、扱えない処理系では import でエラーになる。取り込めたあとの「無い・権限が無い」は Result で返る。

import std.file;
_ = file.write("さかな.txt", "さめ\n");
if var text = file.read("さかな.txt") { print(text.trim()); }   // さめ
_ = file.remove("さかな.txt");
file.read file.read_bytes file.write file.write_bytes file.append file.exists file.is_dir file.size file.modified file.remove file.copy file.rename file.list file.make_dir file.open File.read_line File.read File.write File.close

関数

file.read(p: string) → Result<string>

UTF-8 の文字列として、まるごと読む。

_ = file.write("data.txt", "さめ\n");
if var text = file.read("data.txt") {
  print(text.trim());   // さめ
} else var e {
  print(e.message());
}
_ = file.remove("data.txt");
file.read_bytes(p: string) → Result<bytes>

バイト列として、まるごと読む。

_ = file.write("data.txt", "さめ");
if var b = file.read_bytes("data.txt") { print(b.len()); }   // 6
_ = file.remove("data.txt");
file.write(p: string, text: string) → Result<void>

文字列を書く。すでにあれば上書きする。

_ = file.write("data.txt", "さめ\n");
print(file.exists("data.txt"));   // true
_ = file.remove("data.txt");
file.write_bytes(p: string, b: bytes) → Result<void>

バイト列を書く。すでにあれば上書きする。

_ = file.write_bytes("data.bin", "さめ".bytes());
if var b = file.read_bytes("data.bin") { print(b.len()); }   // 6
_ = file.remove("data.bin");
file.append(p: string, text: string) → Result<void>

末尾に足す。無ければ作る。

_ = file.write("log.txt", "1\n");
_ = file.append("log.txt", "2\n");
if var text = file.read("log.txt") { print(text.trim().split("\n").len()); }   // 2
_ = file.remove("log.txt");
file.exists(p: string) → bool

あるかどうか。

print(file.exists("ない.txt"));   // false
file.is_dir(p: string) → bool

ディレクトリかどうか。

_ = file.make_dir("data");
print(file.is_dir("data"));   // true
file.size(p: string) → Result<int>

バイト数。

_ = file.write("data.txt", "さめ");
if var n = file.size("data.txt") { print(n); }   // 6
_ = file.remove("data.txt");
file.modified(p: string) → Result<Time>

最後に書き換えた時刻。

import std.time;
_ = file.write("data.txt", "さめ");
if var t = file.modified("data.txt") { print(t.year() >= 2026); }   // true
_ = file.remove("data.txt");
file.remove(p: string) → Result<void>

消す。

_ = file.write("data.txt", "さめ");
_ = file.remove("data.txt");
print(file.exists("data.txt"));   // false
file.copy(from: string, to: string) → Result<void>

複製する。

_ = file.write("a.txt", "さめ");
_ = file.copy("a.txt", "b.txt");
print(file.exists("b.txt"));   // true
_ = file.remove("a.txt");
_ = file.remove("b.txt");
file.rename(from: string, to: string) → Result<void>

名前を変える。場所を移すのにも使う。

_ = file.write("a.txt", "さめ");
_ = file.rename("a.txt", "b.txt");
print(file.exists("a.txt"));   // false
_ = file.remove("b.txt");
file.list(dir: string) → Result<list<string>>

ディレクトリの中の名前を並べる。

_ = file.make_dir("data");
_ = file.write("data/fish.txt", "さめ");
if var names = file.list("data") { print(names.len() >= 1); }   // true
file.make_dir(p: string) → Result<void>

ディレクトリを作る。途中の階層も作る。

_ = file.make_dir("a/b/c");
print(file.is_dir("a/b/c"));   // true
file.open(p: string, mode: string) → Result<File>

開いて、少しずつ読み書きする。大きなファイルに使う。

pstringファイルの場所
modestring"r" 読む / "w" 上書きする / "a" 末尾に足す
_ = file.write("log.txt", "1行目\n2行目\n");
if var f = file.open("log.txt", "r") {
  while var line = f.read_line() { print(line); }
  f.close();
}
_ = file.remove("log.txt");

File

開いたファイル。コピーしても同じファイルを指す(ハンドル型)。

File.read_line() → string?

1行読む。改行は含まない。終端なら none。

_ = file.write("log.txt", "1行目\n2行目\n");
if var f = file.open("log.txt", "r") {
  print(f.read_line() ?? "");   // 1行目
  f.close();
}
_ = file.remove("log.txt");
File.read(n: int) → Result<bytes>

n バイト読む。残りが少なければ、あるだけ返す。

_ = file.write("data.txt", "さめ");
if var f = file.open("data.txt", "r") {
  if var b = f.read(3) { print(b.to_string() ?? ""); }   // さ
  f.close();
}
_ = file.remove("data.txt");
File.write(text: string) → Result<void>

書く。開くときの mode に合わせて、上書きか追加になる。

if var f = file.open("out.txt", "w") {
  _ = f.write("さめ\n");
  f.close();
}
if var text = file.read("out.txt") { print(text.trim()); }   // さめ
_ = file.remove("out.txt");
File.close() → void

閉じる。書いたものはここで確実に書き出される。

if var f = file.open("out.txt", "w") {
  _ = f.write("さめ");
  f.close();
  print(file.exists("out.txt"));   // true
}
_ = file.remove("out.txt");