Report a bug
		
				If you spot a problem with this page, click here to create a Bugzilla issue.
		
			Improve this page
		
			Quickly fork, edit online, and submit a pull request for this page.
			Requires a signed-in GitHub account. This works well for small changes.
			If you'd like to make larger changes you may want to consider using
			a local clone.
		
	std.file
Utilities for manipulating files and scanning directories. Functions
in this module handle files as a unit, e.g., read or write one file
at a time. For opening files and manipulating them via handles refer
to module std.stdio.
| Category | Functions | 
|---|---|
| General | exists isDir isFile isSymlink rename thisExePath | 
| Directories | chdir dirEntries getcwd mkdir mkdirRecurse rmdir rmdirRecurse tempDir | 
| Files | append copy read readText remove slurp write | 
| Symlinks | symlink readLink | 
| Attributes | attrIsDir attrIsFile attrIsSymlink getAttributes getLinkAttributes getSize setAttributes | 
| Timestamp | getTimes getTimesWin setTimes timeLastModified timeLastAccessed timeStatusChanged | 
| Other | DirEntry FileException PreserveAttributes SpanMode getAvailableDiskSpace | 
See Also: 
The official tutorial for an
introduction to working with files in D, module
std.stdio for opening files and manipulating them via handles,
and module std.path for manipulating path strings.
License: 
Authors: 
Source std/file.d
- classFileException: object.Exception;
- Exception thrown for file I/O errors.Examples:import std.exception : assertThrown; assertThrown!FileException("non.existing.file.".readText); - immutable uinterrno;
- OS error code.
- pure @safe this(scope const(char)[]name, scope const(char)[]msg, stringfile= __FILE__, size_tline= __LINE__);
- Constructor which takes an error message.Parameters:const(char)[] nameName of file for which the error occurred. const(char)[] msgMessage describing the error. string fileThe file where the error occurred. size_t lineThe line where the error occurred. 
- @trusted this(scope const(char)[]name, uinterrno= .errno, stringfile= __FILE__, size_tline= __LINE__);
- Constructor which takes the error number (GetLastError in Windows, errno in POSIX).Parameters:const(char)[] nameName of file for which the error occurred. uint errnoThe error number. string fileThe file where the error occurred. Defaults to __FILE__. size_t lineThe line where the error occurred. Defaults to __LINE__. 
 
- void[]read(R)(Rname, size_tupTo= size_t.max)
 if (isInputRange!R && isSomeChar!(ElementEncodingType!R) && !isInfinite!R && !isConvertibleToString!R);
 void[]read(R)(auto ref Rname, size_tupTo= size_t.max)
 if (isConvertibleToString!R);
- Read entire contents of filenameand returns it as an untyped array. If the file size is larger thanupTo, onlyupTobytes are read.Parameters:R namestring or range of characters representing the file name size_t upToif present, the maximum number of bytes to read Returns:Untyped array of bytes read.Throws:FileException on error.Examples:import std.utf : byChar; scope(exit) { assert(exists(deleteme)); remove(deleteme); } std.file.write(deleteme, "1234"); // deleteme is the name of a temporary file writeln(read(deleteme, 2)); // "12" writeln(read(deleteme.byChar)); // "1234" writeln((cast(const(ubyte)[])read(deleteme)).length); // 4 
- SreadText(S = string, R)(auto ref Rname)
 if (isSomeString!S && (isInputRange!R && !isInfinite!R && isSomeChar!(ElementType!R) || is(StringTypeOf!R)));
- Reads and validates (using std.utf.validate) a text file. S can be an array of any character type. However, no width or endian conversions are performed. So, if the width or endianness of the characters in the given file differ from the width or endianness of the element type of S, then validation will fail.Parameters:S the string type of the file R namestring or range of characters representing the file name Returns:Array of characters read.Throws:FileException if there is an error reading the file, std.utf.UTFException on UTF decoding error.Examples:Read file with UTF-8 text.write(deleteme, "abc"); // deleteme is the name of a temporary file scope(exit) remove(deleteme); string content = readText(deleteme); writeln(content); // "abc" 
- voidwrite(R)(Rname, const void[]buffer)
 if ((isInputRange!R && !isInfinite!R && isSomeChar!(ElementEncodingType!R) || isSomeString!R) && !isConvertibleToString!R);
 voidwrite(R)(auto ref Rname, const void[]buffer)
 if (isConvertibleToString!R);
- Writebufferto filename.Creates the file if it does not already exist.Parameters:R namestring or range of characters representing the file name void[] bufferdata to be written to file Throws:FileException on error.See Also:Examples:scope(exit) { assert(exists(deleteme)); remove(deleteme); } int[] a = [ 0, 1, 1, 2, 3, 5, 8 ]; write(deleteme, a); // deleteme is the name of a temporary file writeln(cast(int[])read(deleteme)); // a 
- voidappend(R)(Rname, const void[]buffer)
 if ((isInputRange!R && !isInfinite!R && isSomeChar!(ElementEncodingType!R) || isSomeString!R) && !isConvertibleToString!R);
 voidappend(R)(auto ref Rname, const void[]buffer)
 if (isConvertibleToString!R);
- Appendsbufferto filename.Creates the file if it does not already exist.Parameters:R namestring or range of characters representing the file name void[] bufferdata to be appended to file Throws:FileException on error.Examples:scope(exit) { assert(exists(deleteme)); remove(deleteme); } int[] a = [ 0, 1, 1, 2, 3, 5, 8 ]; write(deleteme, a); // deleteme is the name of a temporary file int[] b = [ 13, 21 ]; append(deleteme, b); writeln(cast(int[])read(deleteme)); // a ~ b 
- voidrename(RF, RT)(RFfrom, RTto)
 if ((isInputRange!RF && !isInfinite!RF && isSomeChar!(ElementEncodingType!RF) || isSomeString!RF) && !isConvertibleToString!RF && (isInputRange!RT && !isInfinite!RT && isSomeChar!(ElementEncodingType!RT) || isSomeString!RT) && !isConvertibleToString!RT);
 voidrename(RF, RT)(auto ref RFfrom, auto ref RTto)
 if (isConvertibleToString!RF || isConvertibleToString!RT);
- Rename filefromtoto, moving it between directories if required. If the target file exists, it is overwritten.It is not possible to rename a file across different mount points or drives. On POSIX, the operation is atomic. That means, iftoalready exists there will be no time period during the operation wheretois missing. See manpage for rename for more details.Parameters:RF fromstring or range of characters representing the existing file name RT tostring or range of characters representing the target file name Throws:FileException on error.Examples:auto t1 = deleteme, t2 = deleteme~"2"; scope(exit) foreach (t; [t1, t2]) if (t.exists) t.remove(); t1.write("1"); t1.rename(t2); writeln(t2.readText); // "1" t1.write("2"); t1.rename(t2); writeln(t2.readText); // "2" 
- voidremove(R)(Rname)
 if (isInputRange!R && !isInfinite!R && isSomeChar!(ElementEncodingType!R) && !isConvertibleToString!R);
 voidremove(R)(auto ref Rname)
 if (isConvertibleToString!R);
- Delete filename.Parameters:R namestring or range of characters representing the file name Throws:FileException on error.Examples:import std.exception : assertThrown; deleteme.write("Hello"); writeln(deleteme.readText); // "Hello" deleteme.remove; assertThrown!FileException(deleteme.readText); 
- ulonggetSize(R)(Rname)
 if (isInputRange!R && !isInfinite!R && isSomeChar!(ElementEncodingType!R) && !isConvertibleToString!R);
 ulonggetSize(R)(auto ref Rname)
 if (isConvertibleToString!R);
- Get size of filenamein bytes.Parameters:R namestring or range of characters representing the file name Returns:The size of file in bytes.Throws:FileException on error (e.g., file not found).Examples:scope(exit) deleteme.remove; // create a file of size 1 write(deleteme, "a"); writeln(getSize(deleteme)); // 1 // create a file of size 3 write(deleteme, "abc"); writeln(getSize(deleteme)); // 3 
- voidgetTimes(R)(Rname, out SysTimeaccessTime, out SysTimemodificationTime)
 if (isInputRange!R && !isInfinite!R && isSomeChar!(ElementEncodingType!R) && !isConvertibleToString!R);
 voidgetTimes(R)(auto ref Rname, out SysTimeaccessTime, out SysTimemodificationTime)
 if (isConvertibleToString!R);
- Get the access and modified times of file or foldername.Parameters:R nameFile/Folder name to get times for. SysTime accessTimeTime the file/folder was last accessed. SysTime modificationTimeTime the file/folder was last modified. Throws:FileException on error.Examples:import std.datetime : abs, SysTime; scope(exit) deleteme.remove; write(deleteme, "a"); SysTime accessTime, modificationTime; getTimes(deleteme, accessTime, modificationTime); import std.datetime : Clock, seconds; auto currTime = Clock.currTime(); enum leeway = 5.seconds; auto diffAccess = accessTime - currTime; auto diffModification = modificationTime - currTime; assert(abs(diffAccess) <= leeway); assert(abs(diffModification) <= leeway); 
- voidgetTimesWin(R)(Rname, out SysTimefileCreationTime, out SysTimefileAccessTime, out SysTimefileModificationTime)
 if (isInputRange!R && !isInfinite!R && isSomeChar!(ElementEncodingType!R) && !isConvertibleToString!R);
- This function is Windows-Only.Get creation/access/modified times of filename. This is the same as getTimes except that it also gives you the file creation time - which isn't possible on POSIX systems.Parameters:R nameFile name to get times for. SysTime fileCreationTimeTime the file was created. SysTime fileAccessTimeTime the file was last accessed. SysTime fileModificationTimeTime the file was last modified. Throws:FileException on error.
- voidsetTimes(R)(Rname, SysTimeaccessTime, SysTimemodificationTime)
 if (isInputRange!R && !isInfinite!R && isSomeChar!(ElementEncodingType!R) && !isConvertibleToString!R);
 voidsetTimes(R)(auto ref Rname, SysTimeaccessTime, SysTimemodificationTime)
 if (isConvertibleToString!R);
- Set access/modified times of file or foldername.Parameters:R nameFile/Folder name to get times for. SysTime accessTimeTime the file/folder was last accessed. SysTime modificationTimeTime the file/folder was last modified. Throws:FileException on error.Examples:import std.datetime : DateTime, hnsecs, SysTime; scope(exit) deleteme.remove; write(deleteme, "a"); SysTime accessTime = SysTime(DateTime(2010, 10, 4, 0, 0, 30)); SysTime modificationTime = SysTime(DateTime(2018, 10, 4, 0, 0, 30)); setTimes(deleteme, accessTime, modificationTime); SysTime accessTimeResolved, modificationTimeResolved; getTimes(deleteme, accessTimeResolved, modificationTimeResolved); writeln(accessTime); // accessTimeResolved writeln(modificationTime); // modificationTimeResolved 
- SysTimetimeLastModified(R)(Rname)
 if (isInputRange!R && !isInfinite!R && isSomeChar!(ElementEncodingType!R) && !isConvertibleToString!R);
 SysTimetimeLastModified(R)(auto ref Rname)
 if (isConvertibleToString!R);
- Returns the time that the given file was last modified.Parameters:R namethe name of the file to check Returns:Throws:FileException if the given file does not exist.Examples:import std.datetime : abs, DateTime, hnsecs, SysTime; scope(exit) deleteme.remove; import std.datetime : Clock, seconds; auto currTime = Clock.currTime(); enum leeway = 5.seconds; deleteme.write("bb"); assert(abs(deleteme.timeLastModified - currTime) <= leeway); 
- SysTimetimeLastModified(R)(Rname, SysTimereturnIfMissing)
 if (isInputRange!R && !isInfinite!R && isSomeChar!(ElementEncodingType!R));
- Returns the time that the given file was last modified. If the file does not exist, returnsreturnIfMissing.A frequent usage pattern occurs in build automation tools such as make or ant. To check whether file target must be rebuilt from file source (i.e., target is older than source or does not exist), use the comparison below. The code throws a FileException if source does not exist (as it should). On the other hand, the SysTime.min default makes a non-existing target seem infinitely old so the test correctly prompts building it.Parameters:R nameThe name of the file to get the modification time for. SysTime returnIfMissingThe time to return if the given file does not exist. Returns:Example if (source.timeLastModified >= target.timeLastModified(SysTime.min)) { // must (re)build } else { // target is up-to-date } Examples:import std.datetime : SysTime; writeln("file.does.not.exist".timeLastModified(SysTime.min)); // SysTime.min auto source = deleteme ~ "source"; auto target = deleteme ~ "target"; scope(exit) source.remove, target.remove; source.write("."); assert(target.timeLastModified(SysTime.min) < source.timeLastModified); target.write("."); assert(target.timeLastModified(SysTime.min) >= source.timeLastModified); 
- pure nothrow SysTimetimeLastModified()(auto ref stat_tstatbuf);
- This function is POSIX-Only.Returns the time that the given file was last modified.Parameters:stat_t statbufstat_t retrieved from file. 
- pure nothrow SysTimetimeLastAccessed()(auto ref stat_tstatbuf);
- This function is POSIX-Only.Returns the time that the given file was last accessed.Parameters:stat_t statbufstat_t retrieved from file. 
- pure nothrow SysTimetimeStatusChanged()(auto ref stat_tstatbuf);
- This function is POSIX-Only.Returns the time that the given file was last changed.Parameters:stat_t statbufstat_t retrieved from file. 
- boolexists(R)(Rname)
 if (isInputRange!R && !isInfinite!R && isSomeChar!(ElementEncodingType!R) && !isConvertibleToString!R);
 boolexists(R)(auto ref Rname)
 if (isConvertibleToString!R);
- Determine whether the given file (or directory) exists.Parameters:R namestring or range of characters representing the file name Returns:true if the file name specified as input existsExamples:auto f = deleteme ~ "does.not.exist"; assert(!f.exists); f.write("hello"); assert(f.exists); f.remove; assert(!f.exists); 
- uintgetAttributes(R)(Rname)
 if (isInputRange!R && !isInfinite!R && isSomeChar!(ElementEncodingType!R) && !isConvertibleToString!R);
 uintgetAttributes(R)(auto ref Rname)
 if (isConvertibleToString!R);
- Returns the attributes of the given file.Note that the file attributes on Windows and POSIX systems are completely different. On Windows, they're what is returned by GetFileAttributes, whereas on POSIX systems, they're the st_mode value which is part of the stat struct gotten by calling the stat function. On POSIX systems, if the given file is a symbolic link, then attributes are the attributes of the file pointed to by the symbolic link.Parameters:R nameThe file to get the attributes of. Returns:The attributes of the file as a uint.Throws:FileException on error.Examples:getAttributes with a fileimport std.exception : assertThrown; auto f = deleteme ~ "file"; scope(exit) f.remove; assert(!f.exists); assertThrown!FileException(f.getAttributes); f.write("."); auto attributes = f.getAttributes; assert(!attributes.attrIsDir); assert(attributes.attrIsFile); Examples:getAttributes with a directoryimport std.exception : assertThrown; auto dir = deleteme ~ "dir"; scope(exit) dir.rmdir; assert(!dir.exists); assertThrown!FileException(dir.getAttributes); dir.mkdir; auto attributes = dir.getAttributes; assert(attributes.attrIsDir); assert(!attributes.attrIsFile); 
- uintgetLinkAttributes(R)(Rname)
 if (isInputRange!R && !isInfinite!R && isSomeChar!(ElementEncodingType!R) && !isConvertibleToString!R);
 uintgetLinkAttributes(R)(auto ref Rname)
 if (isConvertibleToString!R);
- If the given file is a symbolic link, then this returns the attributes of the symbolic link itself rather than file that it points to. If the given file is not a symbolic link, then this function returns the same result as getAttributes.On Windows, getLinkAttributes is identical to getAttributes. It exists on Windows so that you don't have to special-case code for Windows when dealing with symbolic links.Parameters:R nameThe file to get the symbolic link attributes of. Returns:the attributesThrows:FileException on error.Examples:import std.exception : assertThrown; auto source = deleteme ~ "source"; auto target = deleteme ~ "target"; assert(!source.exists); assertThrown!FileException(source.getLinkAttributes); // symlinking isn't available on Windows version (Posix) { scope(exit) source.remove, target.remove; target.write("target"); target.symlink(source); writeln(source.readText); // "target" assert(source.isSymlink); assert(source.getLinkAttributes.attrIsSymlink); } Examples:if the file is no symlink, getLinkAttributes behaves like getAttributesimport std.exception : assertThrown; auto f = deleteme ~ "file"; scope(exit) f.remove; assert(!f.exists); assertThrown!FileException(f.getLinkAttributes); f.write("."); auto attributes = f.getLinkAttributes; assert(!attributes.attrIsDir); assert(attributes.attrIsFile); Examples:if the file is no symlink, getLinkAttributes behaves like getAttributesimport std.exception : assertThrown; auto dir = deleteme ~ "dir"; scope(exit) dir.rmdir; assert(!dir.exists); assertThrown!FileException(dir.getLinkAttributes); dir.mkdir; auto attributes = dir.getLinkAttributes; assert(attributes.attrIsDir); assert(!attributes.attrIsFile); 
- voidsetAttributes(R)(Rname, uintattributes)
 if (isInputRange!R && !isInfinite!R && isSomeChar!(ElementEncodingType!R) && !isConvertibleToString!R);
 voidsetAttributes(R)(auto ref Rname, uintattributes)
 if (isConvertibleToString!R);
- Set the attributes of the given file.Parameters:R namethe file name uint attributesthe attributes to set the file to Throws:FileException if the given file does not exist.Examples:setAttributes with a fileimport std.exception : assertThrown; import std.conv : octal; auto f = deleteme ~ "file"; version (Posix) { scope(exit) f.remove; assert(!f.exists); assertThrown!FileException(f.setAttributes(octal!777)); f.write("."); auto attributes = f.getAttributes; assert(!attributes.attrIsDir); assert(attributes.attrIsFile); f.setAttributes(octal!777); attributes = f.getAttributes; writeln((attributes & 1023)); // octal!777 } Examples:setAttributes with a directoryimport std.exception : assertThrown; import std.conv : octal; auto dir = deleteme ~ "dir"; version (Posix) { scope(exit) dir.rmdir; assert(!dir.exists); assertThrown!FileException(dir.setAttributes(octal!777)); dir.mkdir; auto attributes = dir.getAttributes; assert(attributes.attrIsDir); assert(!attributes.attrIsFile); dir.setAttributes(octal!777); attributes = dir.getAttributes; writeln((attributes & 1023)); // octal!777 } 
- @property boolisDir(R)(Rname)
 if (isInputRange!R && !isInfinite!R && isSomeChar!(ElementEncodingType!R) && !isConvertibleToString!R);
 @property boolisDir(R)(auto ref Rname)
 if (isConvertibleToString!R);
- Returns whether the given file is a directory.Parameters:R nameThe path to the file. Returns:true if name specifies a directoryThrows:FileException if the given file does not exist.Examples:import std.exception : assertThrown; auto dir = deleteme ~ "dir"; auto f = deleteme ~ "f"; scope(exit) dir.rmdir, f.remove; assert(!dir.exists); assertThrown!FileException(dir.isDir); dir.mkdir; assert(dir.isDir); f.write("."); assert(!f.isDir); 
- pure nothrow @nogc @safe boolattrIsDir(uintattributes);
- Returns whether the given file attributes are for a directory.Parameters:uint attributesThe file attributes. Returns:true if attributes specifies a directoryExamples:import std.exception : assertThrown; auto dir = deleteme ~ "dir"; auto f = deleteme ~ "f"; scope(exit) dir.rmdir, f.remove; assert(!dir.exists); assertThrown!FileException(dir.getAttributes.attrIsDir); dir.mkdir; assert(dir.isDir); assert(dir.getAttributes.attrIsDir); f.write("."); assert(!f.isDir); assert(!f.getAttributes.attrIsDir); 
- @property boolisFile(R)(Rname)
 if (isInputRange!R && !isInfinite!R && isSomeChar!(ElementEncodingType!R) && !isConvertibleToString!R);
 @property boolisFile(R)(auto ref Rname)
 if (isConvertibleToString!R);
- Returns whether the given file (or directory) is a file.On Windows, if a file is not a directory, then it's a file. So, eitherisFileor isDir will return true for any given file. On POSIX systems, ifisFileis true, that indicates that the file is a regular file (e.g. not a block not device). So, on POSIX systems, it's possible for bothisFileand isDir to be false for a particular file (in which case, it's a special file). You can use getAttributes to get the attributes to figure out what type of special it is, or you can use DirEntry to get at its statBuf, which is the result from stat. In either case, see the man page for stat for more information.Parameters:R nameThe path to the file. Returns:true if name specifies a fileThrows:FileException if the given file does not exist.Examples:import std.exception : assertThrown; auto dir = deleteme ~ "dir"; auto f = deleteme ~ "f"; scope(exit) dir.rmdir, f.remove; dir.mkdir; assert(!dir.isFile); assert(!f.exists); assertThrown!FileException(f.isFile); f.write("."); assert(f.isFile); 
- pure nothrow @nogc @safe boolattrIsFile(uintattributes);
- Returns whether the given file attributes are for a file.On Windows, if a file is not a directory, it's a file. So, eitherattrIsFileor attrIsDir will return true for the attributes of any given file. On POSIX systems, ifattrIsFileis true, that indicates that the file is a regular file (e.g. not a block not device). So, on POSIX systems, it's possible for bothattrIsFileand attrIsDir to be false for a particular file (in which case, it's a special file). If a file is a special file, you can use the attributes to check what type of special file it is (see the man page for stat for more information).Parameters:uint attributesThe file attributes. Returns:true if the given file attributes are for a fileExample assert(attrIsFile(getAttributes("/etc/fonts/fonts.conf"))); assert(attrIsFile(getLinkAttributes("/etc/fonts/fonts.conf"))); Examples:import std.exception : assertThrown; auto dir = deleteme ~ "dir"; auto f = deleteme ~ "f"; scope(exit) dir.rmdir, f.remove; dir.mkdir; assert(!dir.isFile); assert(!dir.getAttributes.attrIsFile); assert(!f.exists); assertThrown!FileException(f.getAttributes.attrIsFile); f.write("."); assert(f.isFile); assert(f.getAttributes.attrIsFile); 
- @property boolisSymlink(R)(Rname)
 if (isInputRange!R && !isInfinite!R && isSomeChar!(ElementEncodingType!R) && !isConvertibleToString!R);
 @property boolisSymlink(R)(auto ref Rname)
 if (isConvertibleToString!R);
- Returns whether the given file is a symbolic link.On Windows, returns true when the file is either a symbolic link or a junction point.Parameters:R nameThe path to the file. Returns:true if name is a symbolic linkThrows:FileException if the given file does not exist.Examples:import std.exception : assertThrown; auto source = deleteme ~ "source"; auto target = deleteme ~ "target"; assert(!source.exists); assertThrown!FileException(source.isSymlink); // symlinking isn't available on Windows version (Posix) { scope(exit) source.remove, target.remove; target.write("target"); target.symlink(source); writeln(source.readText); // "target" assert(source.isSymlink); assert(source.getLinkAttributes.attrIsSymlink); } 
- pure nothrow @nogc @safe boolattrIsSymlink(uintattributes);
- Returns whether the given file attributes are for a symbolic link.On Windows, return true when the file is either a symbolic link or a junction point.Parameters:uint attributesThe file attributes. Returns:true if attributes are for a symbolic linkExample core.sys.posix.unistd.symlink("/etc/fonts/fonts.conf", "/tmp/alink"); assert(!getAttributes("/tmp/alink").isSymlink); assert(getLinkAttributes("/tmp/alink").isSymlink); Examples:import std.exception : assertThrown; auto source = deleteme ~ "source"; auto target = deleteme ~ "target"; assert(!source.exists); assertThrown!FileException(source.getLinkAttributes.attrIsSymlink); // symlinking isn't available on Windows version (Posix) { scope(exit) source.remove, target.remove; target.write("target"); target.symlink(source); writeln(source.readText); // "target" assert(source.isSymlink); assert(source.getLinkAttributes.attrIsSymlink); } 
- voidchdir(R)(Rpathname)
 if (isInputRange!R && !isInfinite!R && isSomeChar!(ElementEncodingType!R) && !isConvertibleToString!R);
 voidchdir(R)(auto ref Rpathname)
 if (isConvertibleToString!R);
- Change directory topathname. Equivalent to cd on Windows and POSIX.Parameters:R pathnamethe directory to step into Throws:FileException on error.Examples:import std.algorithm.comparison : equal; import std.path : buildPath; auto cwd = getcwd; auto dir = deleteme ~ "dir"; dir.mkdir; scope(exit) cwd.chdir, dir.rmdirRecurse; dir.buildPath("a").write("."); dir.chdir; // step into dir "b".write("."); dirEntries(".", SpanMode.shallow).equal( [".".buildPath("b"), ".".buildPath("a")] ); 
- voidmkdir(R)(Rpathname)
 if (isInputRange!R && !isInfinite!R && isSomeChar!(ElementEncodingType!R) && !isConvertibleToString!R);
 voidmkdir(R)(auto ref Rpathname)
 if (isConvertibleToString!R);
- Make a new directorypathname.Parameters:R pathnamethe path of the directory to make Throws:FileException on POSIX or WindowsException on Windows if an error occured.Examples:import std.file : mkdir; auto dir = deleteme ~ "dir"; scope(exit) dir.rmdir; dir.mkdir; assert(dir.exists); Examples:import std.exception : assertThrown; assertThrown("a/b/c/d/e".mkdir); 
- @safe voidmkdirRecurse(scope const(char)[]pathname);
- Make directory and all parent directories as needed.Does nothing if the directory specified bypathnamealready exists.Parameters:const(char)[] pathnamethe full path of the directory to create Throws:FileException on error.Examples:import std.path : buildPath; auto dir = deleteme ~ "dir"; scope(exit) dir.rmdirRecurse; dir.mkdir; assert(dir.exists); dir.mkdirRecurse; // does nothing // creates all parent directories as needed auto nested = dir.buildPath("a", "b", "c"); nested.mkdirRecurse; assert(nested.exists); Examples:import std.exception : assertThrown; scope(exit) deleteme.remove; deleteme.write("a"); // cannot make directory as it's already a file assertThrown!FileException(deleteme.mkdirRecurse); 
- voidrmdir(R)(Rpathname)
 if (isInputRange!R && !isInfinite!R && isSomeChar!(ElementEncodingType!R) && !isConvertibleToString!R);
 voidrmdir(R)(auto ref Rpathname)
 if (isConvertibleToString!R);
- Remove directorypathname.Parameters:R pathnameRange or string specifying the directory name Throws:FileException on error.Examples:auto dir = deleteme ~ "dir"; dir.mkdir; assert(dir.exists); dir.rmdir; assert(!dir.exists); 
- voidsymlink(RO, RL)(ROoriginal, RLlink)
 if ((isInputRange!RO && !isInfinite!RO && isSomeChar!(ElementEncodingType!RO) || isConvertibleToString!RO) && (isInputRange!RL && !isInfinite!RL && isSomeChar!(ElementEncodingType!RL) || isConvertibleToString!RL));
- This function is POSIX-Only.Creates a symbolic link (symlink).Parameters:RO originalThe file that is being linked. This is the target path that's stored in the symlink. A relative path is relative to the created symlink. RL linkThe symlink to create. A relative path is relative to the current working directory. Throws:FileException on error (which includes if the symlink already exists).
- stringreadLink(R)(Rlink)
 if (isInputRange!R && !isInfinite!R && isSomeChar!(ElementEncodingType!R) || isConvertibleToString!R);
- This function is POSIX-Only.Returns the path to the file pointed to by a symlink. Note that the path could be either relative or absolute depending on the symlink. If the path is relative, it's relative to the symlink, not the current working directory.Throws:FileException on error.
- @trusted stringgetcwd();
- Get the current working directory.Throws:FileException on error.Examples:auto s = getcwd(); assert(s.length); 
- @trusted stringthisExePath();
- Returns the full path of the current executable.Returns:The path of the executable as a string.Throws:Examples:import std.path : isAbsolute; auto path = thisExePath(); assert(path.exists); assert(path.isAbsolute); assert(path.isFile); 
- structDirEntry;
- Info on a file, similar to what you'd get from stat on a POSIX system.- @safe this(stringpath);
- Constructs a DirEntry for the given file (or directory).Parameters:string pathThe file (or directory) to get a DirEntry for. Throws:FileException if the file does not exist.
- const @property @safe stringname();
- Returns the path to the file represented by this DirEntry.Example auto de1 = DirEntry("/etc/fonts/fonts.conf"); assert(de1.name == "/etc/fonts/fonts.conf"); auto de2 = DirEntry("/usr/share/include"); assert(de2.name == "/usr/share/include"); 
- @property @safe boolisDir();
- Returns whether the file represented by this DirEntry is a directory.Example auto de1 = DirEntry("/etc/fonts/fonts.conf"); assert(!de1.isDir); auto de2 = DirEntry("/usr/share/include"); assert(de2.isDir); 
- @property @safe boolisFile();
- Returns whether the file represented by this DirEntry is a file.On Windows, if a file is not a directory, then it's a file. So, eitherisFileor isDir will return true. On POSIX systems, ifisFileis true, that indicates that the file is a regular file (e.g. not a block not device). So, on POSIX systems, it's possible for bothisFileand isDir to be false for a particular file (in which case, it's a special file). You can use attributes or statBuf to get more information about a special file (see the stat man page for more details).Example auto de1 = DirEntry("/etc/fonts/fonts.conf"); assert(de1.isFile); auto de2 = DirEntry("/usr/share/include"); assert(!de2.isFile); 
- @property @safe boolisSymlink();
- Returns whether the file represented by this DirEntry is a symbolic link.On Windows, return true when the file is either a symbolic link or a junction point.
- @property @safe ulongsize();
- Returns the size of the the file represented by this DirEntry in bytes.
- const @property @safe SysTimetimeCreated();
- This function is Windows-Only.Returns the creation time of the file represented by this DirEntry.
- @property @safe SysTimetimeLastAccessed();
- Returns the time that the file represented by this DirEntry was last accessed.Note that many file systems do not update the access time for files (generally for performance reasons), so there's a good chance thattimeLastAccessedwill return the same value as timeLastModified.
- @property @safe SysTimetimeLastModified();
- Returns the time that the file represented by this DirEntry was last modified.
- const @property @safe SysTimetimeStatusChanged();
- This function is POSIX-Only.Returns the time that the file represented by this DirEntry was last changed (not only in contents, but also in permissions or ownership).
- @property @safe uintattributes();
- Returns the attributes of the file represented by this DirEntry.Note that the file attributes on Windows and POSIX systems are completely different. On, Windows, they're what is returned by GetFileAttributes GetFileAttributes Whereas, an POSIX systems, they're the st_mode value which is part of the stat struct gotten by calling stat. On POSIX systems, if the file represented by this DirEntry is a symbolic link, then attributes are the attributes of the file pointed to by the symbolic link.
- @property @safe uintlinkAttributes();
- On POSIX systems, if the file represented by this DirEntry is a symbolic link, thenlinkAttributesare the attributes of the symbolic link itself. Otherwise,linkAttributesis identical to attributes.On Windows,linkAttributesis identical to attributes. It exists on Windows so that you don't have to special-case code for Windows when dealing with symbolic links.
- @property @safe stat_tstatBuf();
- This function is POSIX-Only.The stat struct gotten from calling stat.
 
- PreserveAttributespreserveAttributesDefault;
- Defaults to Yes.preserveAttributes on Windows, and the opposite on all other platforms.
- voidcopy(RF, RT)(RFfrom, RTto, PreserveAttributespreserve= preserveAttributesDefault)
 if (isInputRange!RF && !isInfinite!RF && isSomeChar!(ElementEncodingType!RF) && !isConvertibleToString!RF && isInputRange!RT && !isInfinite!RT && isSomeChar!(ElementEncodingType!RT) && !isConvertibleToString!RT);
 voidcopy(RF, RT)(auto ref RFfrom, auto ref RTto, PreserveAttributespreserve= preserveAttributesDefault)
 if (isConvertibleToString!RF || isConvertibleToString!RT);
- Copy filefromto fileto. File timestamps are preserved. File attributes are preserved, ifpreserveequals Yes.preserveAttributes. On Windows only Yes.preserveAttributes (the default on Windows) is supported. If the target file exists, it is overwritten.Parameters:RF fromstring or range of characters representing the existing file name RT tostring or range of characters representing the target file name PreserveAttributes preservewhether to preserve the file attributes Throws:FileException on error.Examples:auto source = deleteme ~ "source"; auto target = deleteme ~ "target"; auto targetNonExistent = deleteme ~ "target2"; scope(exit) source.remove, target.remove, targetNonExistent.remove; source.write("source"); target.write("target"); writeln(target.readText); // "target" source.copy(target); writeln(target.readText); // "source" source.copy(targetNonExistent); writeln(targetNonExistent.readText); // "source" 
- voidrmdirRecurse(scope const(char)[]pathname);
 voidrmdirRecurse(ref DirEntryde);
 voidrmdirRecurse(DirEntryde);
- Remove directory and all of its content and subdirectories, recursively.Parameters:const(char)[] pathnamethe path of the directory to completely remove DirEntry deThe DirEntry to remove Throws:FileException if there is an error (including if the given file is not a directory).Examples:import std.path : buildPath; auto dir = deleteme.buildPath("a", "b", "c"); dir.mkdirRecurse; assert(dir.exists); deleteme.rmdirRecurse; assert(!dir.exists); assert(!deleteme.exists); 
- enumSpanMode: int;
- Dictates directory spanning policy for dirEntries (see below).Examples:import std.algorithm.comparison : equal; import std.algorithm.iteration : map; import std.path : buildPath, relativePath; auto root = deleteme ~ "root"; scope(exit) root.rmdirRecurse; root.mkdir; root.buildPath("animals").mkdir; root.buildPath("animals", "cat").mkdir; root.buildPath("animals", "dog").mkdir; root.buildPath("plants").mkdir; alias removeRoot = (e) => e.relativePath(root); root.dirEntries(SpanMode.shallow).map!removeRoot.equal( ["plants", "animals"]); root.dirEntries(SpanMode.depth).map!removeRoot.equal( ["plants", "animals/dog", "animals/cat", "animals"]); root.dirEntries(SpanMode.breadth).map!removeRoot.equal( ["plants", "animals", "animals/dog", "animals/cat"]); - shallow
- Only spans one directory.
- depth
- Spans the directory in depth-first post-order, i.e. the content of any subdirectory is spanned before that subdirectory itself. Useful e.g. when recursively deleting files.
- breadth
- Spans the directory in depth-first pre-order, i.e. the content of any subdirectory is spanned right after that subdirectory itself.Note that SpanMode.breadthwill not result in all directory members occurring before any subdirectory members, i.e. it is not true breadth-first traversal.
 
- autodirEntries(stringpath, SpanModemode, boolfollowSymlink= true);
 autodirEntries(stringpath, stringpattern, SpanModemode, boolfollowSymlink= true);
- Returns an input range of DirEntry that lazily iterates a given directory, also provides two ways of foreach iteration. The iteration variable can be of type string if only the name is needed, or DirEntry if additional details are needed. The span mode dictates how the directory is traversed. The name of each iterated directory entry contains the absolute or relative path (depending on pathname).Parameters:string pathThe directory to iterate over. If empty, the current directory will be iterated. string patternOptional string with wildcards, such as "*.d". When present, it is used to filter the results by their file name. The supported wildcard strings are described under std.path.globMatch. SpanMode modeWhether the directory's sub-directories should be iterated in depth-first post-order (depth), depth-first pre-order (breadth), or not at all (shallow). bool followSymlinkWhether symbolic links which point to directories should be treated as directories and their contents iterated over. Returns:An input range of DirEntry.Throws:FileException if the directory does not exist.Example // Iterate a directory in depth foreach (string name; dirEntries("destroy/me", SpanMode.depth)) { remove(name); } // Iterate the current directory in breadth foreach (string name; dirEntries("", SpanMode.breadth)) { writeln(name); } // Iterate a directory and get detailed info about it foreach (DirEntry e; dirEntries("dmd-testing", SpanMode.breadth)) { writeln(e.name, "\t", e.size); } // Iterate over all *.d files in current directory and all its subdirectories auto dFiles = dirEntries("", SpanMode.depth).filter!(f => f.name.endsWith(".d")); foreach (d; dFiles) writeln(d.name); // Hook it up with std.parallelism to compile them all in parallel: foreach (d; parallel(dFiles, 1)) //passes by 1 file to each thread { string cmd = "dmd -c " ~ d.name; writeln(cmd); std.process.executeShell(cmd); } // Iterate over all D source files in current directory and all its // subdirectories auto dFiles = dirEntries("","*.{d,di}",SpanMode.depth); foreach (d; dFiles) writeln(d.name); Examples:Duplicate functionality of D1's std.file.listdir():string[] listdir(string pathname) { import std.algorithm; import std.array; import std.file; import std.path; return std.file.dirEntries(pathname, SpanMode.shallow) .filter!(a => a.isFile) .map!(a => std.path.baseName(a.name)) .array; } void main(string[] args) { import std.stdio; string[] files = listdir(args[1]); writefln("%s", files); }
- Select!(Types.length == 1, Types[0][], Tuple!Types[])slurp(Types...)(stringfilename, scope const(char)[]format);
- Reads a file line by line and parses the line into a single value or a std.typecons.Tuple of values depending on the length of Types. The lines are parsed using the specified format string. The format string is passed to std.format.formattedRead, and therefore must conform to the format string specification outlined in std.format.Parameters:Types the types that each of the elements in the line should be returned as string filenamethe name of the file to read const(char)[] formatthe format string to use when reading Returns:If only one type is passed, then an array of that type. Otherwise, an array of std.typecons.Tuples.Throws:Exception if the format string is malformed. Also, throws Exception if any of the lines in the file are not fully consumed by the call to std.format.formattedRead. Meaning that no empty lines or lines with extra characters are allowed.Examples:import std.typecons : tuple; scope(exit) { assert(exists(deleteme)); remove(deleteme); } write(deleteme, "12 12.25\n345 1.125"); // deleteme is the name of a temporary file // Load file; each line is an int followed by comma, whitespace and a // double. auto a = slurp!(int, double)(deleteme, "%s %s"); writeln(a.length); // 2 writeln(a[0]); // tuple(12, 12.25) writeln(a[1]); // tuple(345, 1.125) 
- @trusted stringtempDir();
- Returns the path to a directory for temporary files.The return value of the function is cached, so the procedures described below will only be performed the first time the function is called. All subsequent runs will return the same string, regardless of whether environment variables and directory structures have changed in the meantime. The POSIXtempDiralgorithm is inspired by Python's tempfile.tempdir.Returns:On Windows, this function returns the result of calling the Windows API function GetTempPath. On POSIX platforms, it searches through the following list of directories and returns the first one which is found to exist:- The directory given by the TMPDIR environment variable.
- The directory given by the TEMP environment variable.
- The directory given by the TMP environment variable.
- /tmp
- /var/tmp
- /usr/tmp
 tempDirreturns "." on failure, representing the current working directory.Examples:import std.ascii : letters; import std.conv : to; import std.path : buildPath; import std.random : randomSample; import std.utf : byCodeUnit; // random id with 20 letters auto id = letters.byCodeUnit.randomSample(20).to!string; auto myFile = tempDir.buildPath(id ~ "my_tmp_file"); scope(exit) myFile.remove; myFile.write("hello"); writeln(myFile.readText); // "hello" 
- @safe ulonggetAvailableDiskSpace(scope const(char)[]path);
- Returns the available disk space based on a given path. On Windows,pathmust be a directory; on POSIX systems, it can be a file or directory.Parameters:const(char)[] pathon Windows, it must be a directory; on POSIX it can be a file or directory Returns:Available space in bytesThrows:FileException in case of failureExamples:import std.exception : assertThrown; auto space = getAvailableDiskSpace("."); assert(space > 0); assertThrown!FileException(getAvailableDiskSpace("ThisFileDoesNotExist123123")); 
Copyright © 1999-2022 by the D Language Foundation | Page generated by
Ddoc on (no date time)