On Thursday, May 18, 2017 09:40:33 biocyberman via Digitalmars-d-learn wrote: > There is a ongoing discussion about temp file over here: > http://forum.dlang.org/thread/sbehcxusxxibmpkae...@forum.dlang.org > > I have a question about generating a temporary file to write test > data. I can create my own file and use it but just want to use > the existing tool for convenience. testFilename() is used all > over phobos. So, I don't understand why it does not work on my > code. > > The following code fails to compile. > > > % cat testFile.d > #!/usr/bin/env rdmd > import std.stdio; > > unittest{ > > static import std.file; > auto deleteme = testFilename(); > scope(failure) printf("Failed test at line %d\n", __LINE__); > > scope(exit) std.file.remove(deleteme); > > // Do some stuffs with open or writing and reading of the temp > file. > assert(true); > > > > } > void main(string [] args){ > writeln("Main"); > > }
Actually, it's not used all over the place in Phobos. It's only used std.stdio, where it's a private function in a version(unittest) block. It's not part of the public API. And other modules that need something similar have their own solution. std.stdio has version(unittest) string testFilename(string file = __FILE__, size_t line = __LINE__) @safe { import std.conv : text; import std.file : deleteme; import std.path : baseName; // filename intentionally contains non-ASCII (Russian) characters for test Issue 7648 return text(deleteme, "-детка.", baseName(file), ".", line); } and std.file has @property string deleteme() @safe { import std.conv : to; import std.path : buildPath; import std.process : thisProcessID; static _deleteme = "deleteme.dmd.unittest.pid"; static _first = true; if (_first) { _deleteme = buildPath(tempDir(), _deleteme) ~ to!string(thisProcessID); _first = false; } return _deleteme; } If you want to use anything like them, you'll need to declare them in your own code. - Jonathan M Davis