Title here
Summary here
Our first example demonstrates reading files in D. Reading and writing files are basic tasks needed for many D programs. Let’s look at some examples of reading files.
import std.stdio;
import std.file;
import std.string;
// Reading files requires checking most calls for errors.
// This helper will streamline our error checks below.
void check(string msg)
{
if (msg)
{
throw new Exception(msg);
}
}
void main()
{
// Perhaps the most basic file reading task is
// slurping a file's entire contents into memory.
string dat = readText("/tmp/dat");
writeln(dat);
// You'll often want more control over how and what
// parts of a file are read. For these tasks, start
// by opening a file to obtain a File object.
auto f = File("/tmp/dat", "r");
// Read some bytes from the beginning of the file.
// Allow up to 5 to be read but also note how many
// actually were read.
char[5] b1;
auto n1 = f.rawRead(b1);
writefln("%d bytes: %s", n1.length, n1);
// You can also seek to a known location in the file
// and read from there.
f.seek(6);
char[2] b2;
auto n2 = f.rawRead(b2);
writefln("%d bytes @ %d: %s", n2.length, 6, n2);
// The std.stdio package provides some functions that may
// be helpful for file reading. For example, reads
// like the ones above can be more robustly
// implemented with readln.
f.seek(0);
string line = f.readln();
writefln("Read line: %s", line.chomp());
// There is no built-in rewind, but
// seek(0) accomplishes this.
f.seek(0);
// The std.stdio package implements a buffered
// reader that may be useful both for its efficiency
// with many small reads and because of the additional
// reading methods it provides.
auto r4 = f.byLine();
writefln("First line: %s", r4.front);
// Close the file when you're done (usually this would
// be scheduled immediately after opening with
// scope(exit)).
f.close();
}
To run the program, first create a test file:
$ echo "hello" > /tmp/dat
$ echo "d" >> /tmp/dat
$ rdmd reading_files.d
hello
d
5 bytes: hello
2 bytes @ 6: d
Read line: hello
First line: hello
This example demonstrates various methods of reading files in D, including reading entire files, reading specific bytes, seeking to positions in the file, and using buffered readers. The D standard library provides robust tools for file I/O operations, making it straightforward to work with files in your programs.
Next, we’ll look at writing files.