File I/O, Processes and the OS
43.1 Files
import std.stdio, std.file;
std.file.write("out.txt", "Hello\n");
append("out.txt", "More\n");
string content = readText("out.txt");
ubyte[] bin = cast(ubyte[]) read("image.png");
auto f = File("data.txt", "w");
f.writeln("line 1");
f.writefln("x = %d", 42);
f.close();
foreach (line; File("data.txt").byLine) writeln(line); // reuses its buffer: .idup to keep
foreach (line; File("data.txt").byLineCopy) {} // allocates a copy each time
foreach (chunk; File("big.bin").byChunk(4096)) {}
auto lines = File("data.txt").byLineCopy.array;
string input = readln(); // stdin
stderr.writeln("error output");
43.2 Filesystem and Paths
import std.file, std.path;
writeln(getcwd(), " ", tempDir(), " ", thisExePath());
writeln(buildPath("dir", "sub", "file.txt"));
writeln(baseName("/a/b/c.txt"), " ", dirName("/a/b/c.txt"), " ", extension("c.txt"), " ", stripExtension("c.txt"));
writeln(exists("x"), " ", isDir("src"), " ", isFile("app.d"), " ", getSize("app.d"));
mkdirRecurse("build/out");
copy("a.txt", "b.txt");
rename("b.txt", "c.txt");
remove("c.txt");
rmdirRecurse("build");
foreach (DirEntry e; dirEntries(".", "*.d", SpanMode.depth)) writeln(e.name, " ", e.size);
writeln(absolutePath("."), " ", expandTilde("~/x"));
auto mm = new std.mmfile.MmFile("big.bin"); // memory-mapped file
43.3 Processes and Environment
import std.process;
auto r = execute(["git", "--version"]); // capture the output
writeln(r.status, " ", r.output);
auto sh = executeShell("ls -la | wc -l");
auto pid = spawnProcess(["sleep", "1"]);
wait(pid);
auto pipes = pipeProcess(["grep", "x"], Redirect.stdin | Redirect.stdout);
pipes.stdin.writeln("xyz");
pipes.stdin.close();
writeln(pipes.stdout.byLine.front);
writeln(environment.get("HOME", "/"));
environment["MY_VAR"] = "1";
writeln(thisProcessID);
import core.stdc.stdlib : exit;