Dateien
System.IO bietet File, Directory und Path:
string ordner = Path.Combine(Path.GetTempPath(), "kurs-demo");
Directory.CreateDirectory(ordner);
string datei = Path.Combine(ordner, "notiz.txt");
File.WriteAllText(datei, "Zeile 1\nZeile 2\n");
File.AppendAllText(datei, "Zeile 3\n");
string inhalt = File.ReadAllText(datei);
string[] zeilen = File.ReadAllLines(datei);
Console.WriteLine($"{zeilen.Length} Zeilen, {inhalt.Length} Zeichen");
Console.WriteLine(File.Exists(datei) + " " + Path.GetFileName(datei) + " " + Path.GetExtension(datei));
foreach (var z in File.ReadLines(datei).Where(z => z.Contains('3'))) Console.WriteLine(z.Trim()); // zeilenweise, lazy
using (var schreiber = new StreamWriter(Path.Combine(ordner, "stream.txt")))
{
schreiber.WriteLine("über einen Stream");
}
using (var leser = new StreamReader(Path.Combine(ordner, "stream.txt")))
{
string? zeile;
while ((zeile = leser.ReadLine()) != null) Console.WriteLine(zeile);
}
Console.WriteLine(string.Join(",", Directory.GetFiles(ordner).Select(Path.GetFileName).OrderBy(n => n)));
Directory.Delete(ordner, recursive: true);
Console.WriteLine(Directory.Exists(ordner));3 Zeilen, 24 Zeichen True notiz.txt .txt Zeile 3 über einen Stream notiz.txt,stream.txt False
Es gibt zu jeder Methode eine asynchrone Variante (File.ReadAllTextAsync, ...). Baue Pfade immer mit Path.Combine. Dateizugriffe können IOException, FileNotFoundException und UnauthorizedAccessException auslösen.
JSON
System.Text.Json ist eingebaut:
using System.Text.Json;
using System.Text.Json.Serialization;
var mia = new Nutzer("Mia", 17, ["Lesen", "Rad"]);
var optionen = new JsonSerializerOptions { WriteIndented = true, PropertyNamingPolicy = JsonNamingPolicy.CamelCase };
string json = JsonSerializer.Serialize(mia, optionen);
Console.WriteLine(json);
Nutzer? zurueck = JsonSerializer.Deserialize<Nutzer>(json, optionen);
Console.WriteLine($"{zurueck?.Name} {zurueck?.Hobbys.Count}");
var liste = JsonSerializer.Deserialize<List<Nutzer>>("""[{"name":"Tom","alter":19,"hobbys":[]}]""", optionen);
Console.WriteLine(liste![0].Name);
try { JsonSerializer.Deserialize<Nutzer>("{kaputt"); }
catch (JsonException) { Console.WriteLine("ungültiges JSON"); }
using var dok = JsonDocument.Parse("""{"a":{"b":[10,20,30]}}""");
Console.WriteLine(dok.RootElement.GetProperty("a").GetProperty("b")[1].GetInt32());
record Nutzer(string Name, int Alter, List<string> Hobbys);{
"name": "Mia",
"alter": 17,
"hobbys": [
"Lesen",
"Rad"
]
}
Mia 2
Tom
ungültiges JSON
20Weitere Attribute: [JsonPropertyName("x")], [JsonIgnore]. Alternative Bibliothek: Newtonsoft.Json (JsonConvert).
Datum und Zeit
var d = new DateTime(2025, 3, 8, 14, 30, 0);
Console.WriteLine($"{d:dd.MM.yyyy HH:mm} {d.DayOfWeek} {d.DayOfYear} {DateTime.IsLeapYear(2024)}");
Console.WriteLine(d.AddDays(30).ToString("yyyy-MM-dd") + " " + d.AddMonths(-1).ToString("MMMM yyyy", System.Globalization.CultureInfo.InvariantCulture));
var diff = new DateTime(2025, 12, 24) - new DateTime(2025, 3, 8);
Console.WriteLine($"{diff.Days} Tage, {diff.TotalHours} Stunden");
DateOnly tag = new(2025, 12, 24);
TimeOnly zeit = new(18, 0);
Console.WriteLine($"{tag} {zeit} {tag.DayOfWeek}");
Console.WriteLine(DateTime.Parse("2025-03-08T14:30:00").Hour + " " + DateTime.TryParse("kein Datum", out _));
var utc = new DateTimeOffset(2025, 7, 1, 12, 0, 0, TimeSpan.Zero);
Console.WriteLine(utc.ToOffset(TimeSpan.FromHours(2)).ToString("HH:mm zzz"));
var spanne = TimeSpan.FromMinutes(135);
Console.WriteLine($"{spanne} {spanne.TotalHours:F2}");08.03.2025 14:30 Saturday 67 True 2025-04-07 February 2025 291 Tage, 6984 Stunden 12/24/2025 18:00 Wednesday 14 False 14:00 +02:00 02:15:00 2.25
Speichere Zeitpunkte in UTC (DateTime.UtcNow, DateTimeOffset) und rechne erst zur Anzeige in die Ortszeit um.
Umgebung und Argumente
Console.WriteLine(Environment.ProcessorCount > 0);
Console.WriteLine(Environment.GetEnvironmentVariable("GIBT_ES_NICHT") ?? "nicht gesetzt");
Console.WriteLine(Environment.GetCommandLineArgs().Length >= 1);
Console.WriteLine(OperatingSystem.IsLinux() || OperatingSystem.IsWindows() || OperatingSystem.IsMacOS());True nicht gesetzt True True
Merke
File,Directory,Path,StreamReader/StreamWriterfür Dateien;Path.Combinefür Pfade;usingfür StreamsSystem.Text.Json:Serialize,Deserialize,JsonDocumentDateTime,DateOnly,TimeOnly,DateTimeOffset,TimeSpanfür Zeit; Zeitpunkte in UTC speichern- Formate:
ToString("dd.MM.yyyy"); Kultur beachten - Dateizugriffe fangen
IOExceptionund Co. ab
Aufgabe
Speichere eine Liste von Objekten als JSON-Datei, lies sie wieder ein und gib sie sortiert aus.