RSS

タグ別アーカイブ: 同期

C#: ファイル入出力 (同期型)

ここでは同期型 (従来型) のファイル入出力の例を示す。

なお、ここで示す例以外にもファイル入出力には様々な方式がある。

テキストファイル入力

// テキストファイルの読み込み

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("> 終わり。");

 
コメントする

投稿者: : 2024/04/28 投稿先 C#, dotNET

 

タグ: , ,