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();
Open file using name and symbolic access mode. Convenient function for UFCS. Calls std.stdio.detach before assigning a new file handle.