sopen

Open file using name and symbolic access mode. Convenient function for UFCS. Calls std.stdio.detach before assigning a new file handle.

@safe
void
sopen
(
ref scope File file
,
string name
,)

Examples

1 static import std.file;
2 import std.path : buildPath;
3 import std.exception : assertThrown;
4 import std.process : thisProcessID;
5 import std.conv : to;
6 
7 auto deleteme = buildPath(std.file.tempDir(), "deleteme.openfile.unittest.pid" ~ to!string(thisProcessID));
8 scope(exit) std.file.remove(deleteme);
9 
10 // bad set of flags
11 assertThrown(openFile(deleteme, OpenMode.createNew | OpenMode.existingOnly));
12 assertThrown(openFile(deleteme, OpenMode.existingOnly));
13 
14 // opening non-existent file
15 assertThrown(openFile(deleteme, OpenMode.read));
16 assertThrown(openFile(deleteme, OpenMode.update | OpenMode.existingOnly));
17 
18 File f = openFile(deleteme, OpenMode.read | OpenMode.truncate | OpenMode.createNew);
19 f.write("Hello");
20 f.rewind();
21 assert(f.readln() == "Hello");
22 
23 assertThrown(openFile(deleteme, OpenMode.createNew));
24 
25 f.sopen(deleteme, OpenMode.append | OpenMode.existingOnly);
26 f.write(" world");
27 
28 f.sopen(deleteme, OpenMode.update | OpenMode.existingOnly);
29 f.seek(6);
30 f.write("sco");
31 
32 f.sopen(deleteme, OpenMode.read);
33 assert(f.readln() == "Hello scold");
34 
35 f.sopen(deleteme, OpenMode.read | OpenMode.update | OpenMode.existingOnly);
36 f.write("Yo");
37 f.rewind();
38 assert(f.readln() == "Yollo scold");
39 
40 f.sopen(deleteme, OpenMode.read | OpenMode.append | OpenMode.existingOnly);
41 f.write("ing");
42 f.rewind();
43 assert(f.readln() == "Yollo scolding");
44 
45 auto deleteme2 = buildPath(std.file.tempDir(), "deleteme2.openfile.unittest.pid" ~ to!string(thisProcessID));
46 scope(exit) std.file.remove(deleteme2);
47 
48 assertThrown(f.sopen(deleteme2, OpenMode.truncate | OpenMode.existingOnly));
49 
50 f.sopen(deleteme2, OpenMode.read | OpenMode.update | OpenMode.createNew);
51 f.write("baz");
52 f.rewind();
53 assert(f.readln() == "baz");
54 f.seek(3);
55 f.write("bar");
56 f.rewind();
57 assert(f.readln() == "bazbar");
58 
59 f.sopen(deleteme2, OpenMode.read | OpenMode.truncate | OpenMode.existingOnly);
60 f.write("some");
61 f.rewind();
62 assert(f.readln() == "some");
63 
64 f.close();

Meta