ここでは同期型 (従来型) のファイル入出力の例を示す。
なお、ここで示す例以外にもファイル入出力には様々な方式がある。
テキストファイル入力
// テキストファイルの読み込み
Action<Object> println = o => Console.WriteLine(o.ToString());
Action<int> exit = code => Environment.Exit(code);
Console.WriteLine("<< テキストファイルの読み込み >>");
if (args.Length == 0)
{
println("Error: ファイルパスを指定してください。");
exit(1);
}
var path = args[0];
// File.ReadAllText(path). 文字コードは自動判別
var s = File.ReadAllText(path);
println(s);
// File.ReadLines
var lines = File.ReadLines(path).ToList();
lines.ForEach(line => println(line));
// StreamReader を使って行ごとに読む。
using (var reader = File.OpenText(path))
{
var s1 = reader.ReadLine();
println(s1 ?? "null");
}
テキストファイル出力
// テキストファイルの書き込み
Action<Object> println = o => Console.WriteLine(o.ToString());
Action<int> exit = code => Environment.Exit(code);
if (args.Length == 0)
{
println("Error: ファイルパスを指定してください。");
exit(1);
}
var path = args[0];
const string content = "<< テキストファイルの書き込み >>";
Console.WriteLine(content);
// 一括書き込み
File.WriteAllText(path, content);
// 行ごとに書き込み
string[] lines1 = ["12", "345", "6789"];
File.AppendAllLines(path, lines1);
// StreamWriter
string[] lines2 = ["AB", "CDE", "FGHI"];
StreamWriter writer = File.AppendText(path);
lines2.ToList().ForEach(s => writer.WriteLine(s));
writer.Close();
println("終わり。");
バイナリーファイルの読み書き
// バイナリーファイルの読み書き
Action<Object> println = o => Console.WriteLine(o.ToString());
Action<String, Object> printf = (format, data) => Console.WriteLine(format, data);
Func<string> readln = () => Console.ReadLine() ?? "";
Action<int> exit = code => Environment.Exit(code);
if (args.Length == 0)
{
println("Error: 書き込むためのファイルパスを指定してください。");
exit(1);
}
string path = args[0];
if (File.Exists(path))
{
println($"{path} が存在します。上書きされる恐れがあります。 (続行は 'y') > ");
var ans = readln();
if (ans != "y")
{
exit(1);
}
}
// バイト列の書き込み
byte[] content = [0x01, 0x02, 0x03, 0x04];
File.WriteAllBytes(path, content);
// バイト列の読み込み
byte[] buffer = File.ReadAllBytes(path);
// 表示
buffer.ToList().ForEach(b => printf("{0:b16}", b));
println("> 終わり。");