std.file

Утилиты для манипуляции файлами и сканирования каталогов. Функции в этом модуле работают с файлами, как единым целым, например, читают или записывают в один файл за раз. Для открытия файлов и их обработки с помощью дескрипторов обратитесь к модулю std.stdio.
Category Functions
Общее exists isDir isFile isSymlink rename thisExePath
Каталоги chdir dirEntries getcwd mkdir mkdirRecurse rmdir rmdirRecurse tempDir
Файлы append copy read readText remove slurp write
Символические ссылки symlink readLink
Атрибуты attrIsDir attrIsFile attrIsSymlink getAttributes getLinkAttributes getSize setAttributes
Временные метки (Timestamp) getTimes getTimesWin setTimes timeLastModified
Другое DirEntry FileException PreserveAttributes SpanMode
Смотрите также:
Официальный учебник для ознакомления, как работать с файлами в D, модулем std.stdio для открытия файлов и управления ими с помощью дескрипторов, а также модулем std.path для управления строками с путём к файлу.
Лицензия:
Boost License 1.0.
Авторы:
Walter Bright, Andrei Alexandrescu, Jonathan M Davis

Исходный код: std/file.d

Переместиться к: errno · this

class FileException: object.Exception;
Исключение, вызываемое ошибками ввода-вывода файлов.
immutable uint errno;
Код ошибки операционной системы.

Переместиться к: 2

pure @safe this(in char[] name, in char[] msg, string file = __FILE__, size_t line = __LINE__);
Конструктор, который принимает сообщение об ошибке.
Параметры:
char[] name Имя файла, при работе с которым произошла ошибка.
char[] msg Сообщение об ошибке.
string file Файл, в котором произошла ошибка.
size_t line Номер строки, в которой произошла ошибка.
@trusted this(in char[] name, uint errno = .errno, string file = __FILE__, size_t line = __LINE__);
Конструктор, который принимает номер ошибки (GetLastError в Windows, errno в Posix).
Параметры:
char[] name Имя файла, при работе с которым произошла ошибка.
uint errno Номер ошибки.
string file Файл, в котором произошла ошибка. По умолчанию __FILE__.
size_t line Номер строки, в которой произошла ошибка. По умолчанию __LINE__.
void[] read(R)(R name, size_t upTo = size_t.max)
if (isInputRange!R && isSomeChar!(ElementEncodingType!R) && !isInfinite!R && !isConvertibleToString!R);

void[] read(R)(auto ref R name, size_t upTo = size_t.max)
if (isConvertibleToString!R);
Прочитать всё содержимое файла name и вернуть его как нетипизированный массив. Если размер файла больше, чем upTo, считываются только до upTo байтов.
Параметры:
R name строка или диапазон символов, представляющих имя файла
size_t upTo если присутствует, то определяет максимальное количество прочитанных байтов
Возвращает:
Нетипизированный массив прочитанных байтов.
Исключения:
FileException в случае ошибки.
Примеры:
import std.utf : byChar;
scope(exit)
{
    assert(exists(deleteme));
    remove(deleteme);
}

write(deleteme, "1234"); // deleteme - это имя временного файла
writeln(read(deleteme, 2)); // "12"
writeln(read(deleteme.byChar)); // "1234"
writeln((cast(const(ubyte)[])read(deleteme)).length); // 4
S readText(S = string, R)(R name)
if (isSomeString!S && (isInputRange!R && !isInfinite!R && isSomeChar!(ElementEncodingType!R) || isSomeString!R) && !isConvertibleToString!R);

S readText(S = string, R)(auto ref R name)
if (isConvertibleToString!R);
Читает и проверяет (используя std.utf.validate) текстовый файл. S может быть типом массива символов любой ширины и константности. Преобразование ширины не выполняется; Если ширина символов в файле name отличается от ширины элементов S, проверка завершится неудачей.
Параметры:
R name строка или диапазон символов, представляющих имя файла
Возвращает:
Массив прочитанных символов.
Исключения:
FileException в случае файловой ошибки, UTFException в случае ошибки декодирования UTF.
Примеры:
import std.exception : enforce;
write(deleteme, "abc"); // deleteme - это имя временного файла
scope(exit) remove(deleteme);
string content = readText(deleteme);
enforce(content == "abc");
void write(R)(R name, const void[] buffer)
if ((isInputRange!R && !isInfinite!R && isSomeChar!(ElementEncodingType!R) || isSomeString!R) && !isConvertibleToString!R);

void write(R)(auto ref R name, const void[] buffer)
if (isConvertibleToString!R);
Записывает буфер buffer в файл name.
Создаёт файл, если он ещё не существует.
Параметры:
R name строка или диапазон символов, представляющих имя файла
void[] buffer данные, записываемые в файл
Исключения:
FileException в случае ошибки.
Смотрите также:
Примеры:
scope(exit)
{
    assert(exists(deleteme));
    remove(deleteme);
}

int[] a = [ 0, 1, 1, 2, 3, 5, 8 ];
write(deleteme, a); // deleteme - это имя временного файла
writeln(cast(int[])read(deleteme)); // a
void append(R)(R name, const void[] buffer)
if ((isInputRange!R && !isInfinite!R && isSomeChar!(ElementEncodingType!R) || isSomeString!R) && !isConvertibleToString!R);

void append(R)(auto ref R name, const void[] buffer)
if (isConvertibleToString!R);
Добавляет содержимое буфера buffer к файлу name.
Создаёт файл, если он ещё не существует.
Параметры:
R name строка или диапазон символов, представляющих имя файла
void[] buffer данные, добавляемые к файлу
Исключения:
FileException в случае ошибки.
Примеры:
scope(exit)
{
    assert(exists(deleteme));
    remove(deleteme);
}

int[] a = [ 0, 1, 1, 2, 3, 5, 8 ];
write(deleteme, a); // deleteme - это имя временного файла
int[] b = [ 13, 21 ];
append(deleteme, b);
writeln(cast(int[])read(deleteme)); // a ~ b
void rename(RF, RT)(RF from, RT to)
if ((isInputRange!RF && !isInfinite!RF && isSomeChar!(ElementEncodingType!RF) || isSomeString!RF) && !isConvertibleToString!RF && (isInputRange!RT && !isInfinite!RT && isSomeChar!(ElementEncodingType!RT) || isSomeString!RT) && !isConvertibleToString!RT);

void rename(RF, RT)(auto ref RF from, auto ref RT to)
if (isConvertibleToString!RF || isConvertibleToString!RT);
Переименует файл из имени from в имя to. Если целевой файл существует, он перезаписывается.
Параметры:
RF from строка или диапазон символов, представляющих существующее имя файла
RT to строка или диапазон символов, представляющих целевое имя файла
Исключения:
FileException в случае ошибки.
void remove(R)(R name)
if (isInputRange!R && !isInfinite!R && isSomeChar!(ElementEncodingType!R) && !isConvertibleToString!R);

void remove(R)(auto ref R name)
if (isConvertibleToString!R);
Удаляет файл с именем name.
Параметры:
R name строка или диапазон символов, представляющих имя файла
Исключения:
FileException в случае ошибки.
ulong getSize(R)(R name)
if (isInputRange!R && !isInfinite!R && isSomeChar!(ElementEncodingType!R) && !isConvertibleToString!R);

ulong getSize(R)(auto ref R name)
if (isConvertibleToString!R);
Получить размер файла с именем name в байтах.
Параметры:
R name строка или диапазон символов, представляющих имя файла
Исключения:
FileException в случае ошибки (например, файл не найден).
void getTimes(R)(R name, out SysTime accessTime, out SysTime modificationTime)
if (isInputRange!R && !isInfinite!R && isSomeChar!(ElementEncodingType!R) && !isConvertibleToString!R);

void getTimes(R)(auto ref R name, out SysTime accessTime, out SysTime modificationTime)
if (isConvertibleToString!R);
Получить время доступа и изменения файла или каталога name.
Параметры:
R name Имя файла/каталога, для которого нужно получить время.
SysTime accessTime Время последнего обращения к файлу/каталогу.
SysTime modificationTime Время последнего изменения файла/каталога.
Исключения:
FileException в случае ошибки.
void getTimesWin(R)(R name, out SysTime fileCreationTime, out SysTime fileAccessTime, out SysTime fileModificationTime)
if (isInputRange!R && !isInfinite!R && isSomeChar!(ElementEncodingType!R) && !isConvertibleToString!R);
Эта функция работает только под Windows.
Получить время создания/доступа/изменения файла name.
Это то же самое, что и getTimes, за исключением того, что здесь также возвращается время создания файла - что невозможно в системах Posix.
Параметры:
R name Имя файла, для которого нужно получить время
SysTime fileCreationTime Время создания файла.
SysTime fileAccessTime Время последнего обращения к файлу.
SysTime fileModificationTime Время последнего изменения файла.
Исключения:
FileException в случае ошибки.
void setTimes(R)(R name, SysTime accessTime, SysTime modificationTime)
if (isInputRange!R && !isInfinite!R && isSomeChar!(ElementEncodingType!R) && !isConvertibleToString!R);

void setTimes(R)(auto ref R name, SysTime accessTime, SysTime modificationTime)
if (isConvertibleToString!R);
Задать время обращения/изменения файла или каталога name.
Параметры:
R name Имя файла/каталога, для которого нужно установить время.
SysTime accessTime Время последнего обращения к файлу/каталогу.
SysTime modificationTime Время последнего изменения файла/каталога.
Исключения:
FileException в случае ошибки.

Переместиться к: 2

SysTime timeLastModified(R)(R name)
if (isInputRange!R && !isInfinite!R && isSomeChar!(ElementEncodingType!R) && !isConvertibleToString!R);

SysTime timeLastModified(R)(auto ref R name)
if (isConvertibleToString!R);
Возвращает время последнего изменения данного файла.
Исключения:
FileException, если данный файл не существует.
SysTime timeLastModified(R)(R name, SysTime returnIfMissing)
if (isInputRange!R && !isInfinite!R && isSomeChar!(ElementEncodingType!R));
Возвращает время последнего изменения данного файла. Если файл не существует, возвращается returnIfMissing.
Это часто используется в средствах автоматизации сборки, таких как make или ant. Чтобы проверить, должен ли целевой файл target быть перестроен из файла-источника source (т. е. target старше source или не существует), используйте приведенное ниже сравнение. Код генерирует исключение FileException, если source не существует (как и должно быть). С другой стороны, время по-умолчанию SysTime.min делает несуществующий target бесконечно старым, поэтому тест правильно приводит к его созданию.
Параметры:
R name Имя файла, для которого нужно получить время изменения.
SysTime returnIfMissing Возвращаемое время, если данный файл не существует.

Пример:

if (timeLastModified(source) >= timeLastModified(target, SysTime.min))
{
    // нужно (пере)строить
}
else
{
    // целевой файл target актуален
}

bool exists(R)(R name)
if (isInputRange!R && !isInfinite!R && isSomeChar!(ElementEncodingType!R) && !isConvertibleToString!R);

bool exists(R)(auto ref R name)
if (isConvertibleToString!R);
Определяет, существует ли данный файл (или каталог).
Параметры:
R name строка или диапазон символов, представляющих имя файла
Возвращает:
true, если заданное на входе имя файла существует
uint getAttributes(R)(R name)
if (isInputRange!R && !isInfinite!R && isSomeChar!(ElementEncodingType!R) && !isConvertibleToString!R);

uint getAttributes(R)(auto ref R name)
if (isConvertibleToString!R);
Возвращает атрибуты данного файла.
Обратите внимание, что атрибуты файлов в системах Windows и Posix совершенно разные. В Windows это то, что возвращается функцией GetFileAttributes, тогда как в системах Posix это значение поля st_mode, которое является частью структуры stat, полученной вызовом функции stat.
В системах Posix, если данный файл является символической ссылкой, атрибуты являются атрибутами файла, на который указывает символическая ссылка.
Параметры:
R name Файл, для которого нужно получить атрибуты.
Исключения:
FileException в случае ошибки.
uint getLinkAttributes(R)(R name)
if (isInputRange!R && !isInfinite!R && isSomeChar!(ElementEncodingType!R) && !isConvertibleToString!R);

uint getLinkAttributes(R)(auto ref R name)
if (isConvertibleToString!R);
Если данный файл является символической ссылкой, он возвращает атрибуты самой символической ссылки, а не файла, на который ссылка указывает. Если данный файл не является символической ссылкой, то эта функция возвращает тот же результат, что и getAttributes.
В Windows getLinkAttributes идентичен getAttributes. Он существует в Windows, так как у вас нет специального кода для Windows при работе с символическими ссылками.
Параметры:
R name The file to get the symbolic link attributes of.
Возвращает:
атрибуты
Исключения:
FileException в случае ошибки.
void setAttributes(R)(R name, uint attributes)
if (isInputRange!R && !isInfinite!R && isSomeChar!(ElementEncodingType!R) && !isConvertibleToString!R);

void setAttributes(R)(auto ref R name, uint attributes)
if (isConvertibleToString!R);
Задать атрибуты attributes данного файла.
Параметры:
R name имя файла
uint attributes атрибуты, которые нужно задать для файла
Исключения:
FileException, если данный файл не существует.
@property bool isDir(R)(R name)
if (isInputRange!R && !isInfinite!R && isSomeChar!(ElementEncodingType!R) && !isConvertibleToString!R);

@property bool isDir(R)(auto ref R name)
if (isConvertibleToString!R);
Возвращает, является ли данный файл каталогом.
Параметры:
R name Путь к файлу.
Возвращает:
true, если имя name указывает на каталог
Исключения:
FileException, если данный файл не существует.

Пример:

assert(!"/etc/fonts/fonts.conf".isDir);
assert("/usr/share/include".isDir);

pure nothrow @nogc @safe bool attrIsDir(uint attributes);
Возвращает, являются ли заданные файловые атрибуты атрибутами каталога.
Параметры:
uint attributes Атрибуты файла.
Возвращает:
true, если атрибуты задают каталог

Пример:

assert(!attrIsDir(getAttributes("/etc/fonts/fonts.conf")));
assert(!attrIsDir(getLinkAttributes("/etc/fonts/fonts.conf")));

@property bool isFile(R)(R name)
if (isInputRange!R && !isInfinite!R && isSomeChar!(ElementEncodingType!R) && !isConvertibleToString!R);

@property bool isFile(R)(auto ref R name)
if (isConvertibleToString!R);
Возвращает, является ли данный файл (или каталог) файлом.
В Windows, если файл не является каталогом, то это файл. Таким образом, либо isFile, либо isDir вернут true для любого заданного файла.
В системах Posix, если isFile имеет значение true, то это означает, что файл является обычным файлом (а не блочным устройством, например). Таким образом, в системах Posix возможно, что isFile и isDir одновременно окажутся в значении false для определенного файла (в этом случае, он является специальным файлом). Вы можете использовать getAttributes для получения атрибутов, чтобы выяснить, каким именно типом он является, или вы можете использовать DirEntry для получения statBuf, который является результатом stat. В любом случае, смотрите man-страницу о stat для получения дополнительной информации.
Параметры:
R name Путь к файлу.
Возвращает:
true, если имя name указывает на файл
Исключения:
FileException, если данный файл не существует.

Пример:

assert("/etc/fonts/fonts.conf".isFile);
assert(!"/usr/share/include".isFile);

pure nothrow @nogc @safe bool attrIsFile(uint attributes);
Возвращает, являются ли данные атрибуты attributes атрибутами файла.
В Windows, если файл не является каталогом, то это файл. Таким образом, либо attrIsFile, либо attrIsDir вернут true для любых данных файловых атрибутов.
В системах Posix, если attrIsFile имеет значение true, то это означает, что файл является обычным файлом (а не блочным устройством, например). Таким образом, в системах Posix возможно, что attrIsFile и attrIsDir одновременно окажутся в значении false для определенного файла (в этом случае, он является специальным файлом). Если файл является специальным, вы можете использовать attributes чтобы выясненить, какой именно это тип специального файла (дополнительную информацию смотрите в man-странице для stat).
Параметры:
uint attributes Файловые атрибуты.
Возвращает:
true, если данные файловые атрибуты относятся к файлу

Пример:

assert(attrIsFile(getAttributes("/etc/fonts/fonts.conf")));
assert(attrIsFile(getLinkAttributes("/etc/fonts/fonts.conf")));

@property bool isSymlink(R)(R name)
if (isInputRange!R && !isInfinite!R && isSomeChar!(ElementEncodingType!R) && !isConvertibleToString!R);

@property bool isSymlink(R)(auto ref R name)
if (isConvertibleToString!R);
Возвращает, является ли данный файл символической ссылкой.
В Windows возвращает true, когда файл является символической ссылкой или точкой соединения (junction point).
Параметры:
R name Путь к файлу.
Возвращает:
true, если name – это символическая ссылка
Исключения:
FileException если данный файл не существует.
pure nothrow @nogc @safe bool attrIsSymlink(uint attributes);
Возвращает, являются ли данные атрибуты attributes атрибутами символической ссылки.
В Windows возвращает true, когда attributes относятся к символической ссылке или к точке соединения (junction point).
Параметры:
uint attributes Файловые атрибуты.
Возвращает:
true, если данные файловые атрибуты относятся к символической ссылке

Пример:

core.sys.posix.unistd.symlink("/etc/fonts/fonts.conf", "/tmp/alink");

assert(!getAttributes("/tmp/alink").isSymlink);
assert(getLinkAttributes("/tmp/alink").isSymlink);

void chdir(R)(R pathname)
if (isInputRange!R && !isInfinite!R && isSomeChar!(ElementEncodingType!R) && !isConvertibleToString!R);

void chdir(R)(auto ref R pathname)
if (isConvertibleToString!R);
Изменить каталог на pathname.
Исключения:
FileException в случае ошибки.
void mkdir(R)(R pathname)
if (isInputRange!R && !isInfinite!R && isSomeChar!(ElementEncodingType!R) && !isConvertibleToString!R);

void mkdir(R)(auto ref R pathname)
if (isConvertibleToString!R);
Создать каталог pathname.
Исключения:
FileException в системах Posix или WindowsException в Windows, если произошла ошибка.
void mkdirRecurse(in char[] pathname);
Создать каталог и все родительские каталоги, если тебуется.
Ничего не делает, если каталог, указанный именем pathname, уже существует.
Исключения:
FileException в случае ошибки.
void rmdir(R)(R pathname)
if (isInputRange!R && !isInfinite!R && isSomeChar!(ElementEncodingType!R) && !isConvertibleToString!R);

void rmdir(R)(auto ref R pathname)
if (isConvertibleToString!R);
Удалить каталог pathname.
Параметры:
R pathname Диапазон или строка, определяющая имя каталога
Исключения:
FileException в случае ошибки.
void symlink(RO, RL)(RO original, RL link)
if ((isInputRange!RO && !isInfinite!RO && isSomeChar!(ElementEncodingType!RO) || isConvertibleToString!RO) && (isInputRange!RL && !isInfinite!RL && isSomeChar!(ElementEncodingType!RL) || isConvertibleToString!RL));
Функция только для систем Posix.
Создает символическую ссылку (symlink).
Параметры:
RO original Файл, с которым создаётся связь. Это целевой путь, который будет сохранён в символической ссылке. Путь относительно создаваемой символической ссылки.
RL link Создаваемая символическая ссылка. Путь относительно к текущего рабочего каталога.
Исключения:
FileException в случае ошибки (в том числе, если символическая ссылка уже существует).
string readLink(R)(R link)
if (isInputRange!R && !isInfinite!R && isSomeChar!(ElementEncodingType!R) || isConvertibleToString!R);
Функция только для систем Posix.
Возвращает путь к файлу, на который указывает символическая ссылка. Обратите внимание, что путь может быть как относительным, так и абсолютным, в зависимости от символической ссылки. Если путь относительный, он относителен от символической ссылки, а не текущего рабочего каталога.
Исключения:
FileException в случае ошибки.
string getcwd();
Получить текущий рабочий каталог.
Исключения:
FileException в случае ошибки.
@trusted string thisExePath();
Возвращает полный путь к текущему исполняемому файлу.
Исключения:

Переместиться к: attributes · isDir · isFile · isSymlink · linkAttributes · name · size · statBuf · this · timeCreated · timeLastAccessed · timeLastModified

struct DirEntry;
Информация о файле, аналогичная той, что вы получаете от команды stat в системе Posix.
this(string path);
Создаёт DirEntry для данного файла (или каталога).
Параметры:
string path Файл (или каталог) для получения DirEntry.
Исключения:
FileException, если файл отсутсвует.
const @property string name();
Возвращает путь к файлу, представленному этим DirEntry.

Пример:

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 bool isDir();
Возвращает, является ли файл, представленный этим DirEntry, каталогом.

Пример:

auto de1 = DirEntry("/etc/fonts/fonts.conf");
assert(!de1.isDir);

auto de2 = DirEntry("/usr/share/include");
assert(de2.isDir);

@property bool isFile();
Возвращает, является ли файл, представленный этим DirEntry, файлом.
В Windows, если файл не является каталогом, то это файл. Таким образом, либо isFile, либо isDir вернут true.
В системах Posix, если attrIsFile имеет значение true, то это означает, что файл является обычным файлом (а не блочным устройством, например). Таким образом, в системах Posix возможно, что attrIsFile и attrIsDir одновременно окажутся в значении false для определенного файла (в этом случае, он является специальным файлом). Если файл является специальным, вы можете использовать attributes или statBuf для получения дополнительной информации о специальном файле (подробности описаны в man-странице для stat).

Пример:

auto de1 = DirEntry("/etc/fonts/fonts.conf");
assert(de1.isFile);

auto de2 = DirEntry("/usr/share/include");
assert(!de2.isFile);

@property bool isSymlink();
Возвращает, является ли файл, представленный этим DirEntry символической ссылкой.
В Windows возвращает true, когда файл является символической ссылкой или точкой соединения (junction point).
@property ulong size();
Возвращает размер файла, представленного этим DirEntry, в байтах.
const @property SysTime timeCreated();
Эта функция только для Windows.
Возвращает время создания файла, представленного этим DirEntry.
@property SysTime timeLastAccessed();
Возвращает время последнего обращения к файлу, представленному этим DirEntry.
Обратите внимание, что многие файловые системы не обновляют время доступа к файлам (как правило, по соображениям производительности), поэтому велика вероятность, что timeLastAccessed вернет то же значение, что и timeLastModified.
@property SysTime timeLastModified();
Возвращает время последнего изменения файла, представленного этим DirEntry.
@property uint attributes();
Возвращает атрибуты файла, представленного этим DirEntry.
Обратите внимание, что атрибуты файлов в системах Windows и Posix совершенно разные. В Windows это то, что возвращается функцией GetFileAttributes, тогда как в системах Posix это значение поля st_mode, которое является частью структуры stat, полученной вызовом функции stat.
В системах Posix, если файл представленный этим DirEntry, является символической ссылкой, атрибуты являются атрибутами файла, на который указывает символическая ссылка.
@property uint linkAttributes();
В системах Posix, если файл, представленный этим DirEntry, является символической ссылкой, то linkAttributes возвращает атрибуты самой символической ссылки. В противном случае атрибуты linkAttributes идентичны attributes.
В Windows linkAttributes идентично attributes. Он существует в Windows, так как у вас нет специального кода для Windows при работе с символическими ссылками.
@property stat_t statBuf();
Эта функция только для систем Posix.
Структура stat, получаемая при вызове stat.
PreserveAttributes preserveAttributesDefault;
По умолчанию Yes.preserveAttributes в Windows, и наоборот на всех других платформах.
void copy(RF, RT)(RF from, RT to, PreserveAttributes preserve = preserveAttributesDefault)
if (isInputRange!RF && !isInfinite!RF && isSomeChar!(ElementEncodingType!RF) && !isConvertibleToString!RF && isInputRange!RT && !isInfinite!RT && isSomeChar!(ElementEncodingType!RT) && !isConvertibleToString!RT);

void copy(RF, RT)(auto ref RF from, auto ref RT to, PreserveAttributes preserve = preserveAttributesDefault)
if (isConvertibleToString!RF || isConvertibleToString!RT);
Скопировать файл from в файл to. Временные метки файлов сохраняются. Атрибуты файлов сохраняются, если preserve равно Yes.preserveAttributes. В Windows поддерживается только Yes.preserveAttributes (по умолчанию в Windows). Если целевой файл существует, он перезаписывается.
Параметры:
RF from строка или диапазон символов, представляющих имя существующего файла
RT to строка или диапазон символов, представляющих имя целевого файла
PreserveAttributes preserve сохранять ли атрибуты файла
Исключения:
FileException в случае ошибки.

Переместиться к: 2

void rmdirRecurse(in char[] pathname);
Удалить каталог, всё его содержимое, и, рекурсивно, подкаталоги.
Исключения:
FileException в случае ошибки (в том числе, если данный файл не является каталогом).
void rmdirRecurse(ref DirEntry de);

void rmdirRecurse(DirEntry de);
Удалить каталог, всё его содержимое, и, рекурсивно, подкаталоги.
Исключения:
FileException в случае ошибки (в том числе, если данный файл не является каталогом).

Переместиться к: breadth · depth · shallow

enum SpanMode: int;
Задаёт политику обхода каталога для функции dirEntries (см. ниже).
shallow
Обходит только сам каталог.
depth
Задаёт обход каталога в глубину, т. е. содержимое любого подкаталога возвращается до самого этого подкаталога. Полезно, например, при рекурсивном удалении файлов.
breadth
Задаёт обход каталога в ширину, т. е. содержимое любого подкаталога возвращается непосредственно после самого этого подкаталога.

Переместиться к: 2

auto dirEntries(string path, SpanMode mode, bool followSymlink = true);
Возвращает входной диапазон из DirEntry, который лениво итерирует по заданному каталогу, также предоставляет два способа foreach-итерирования. Переменная итерации может иметь тип string, если требуется только имя, или DirEntry, если необходимы дополнительные данные. mode определяет порядок обхода каталога. Имя каждой получаемой при итерации записи каталога содержит абсолютный путь.
Параметры:
string path Каталог для итерации. Если пуст, итерироваться будет текущий каталог.
SpanMode mode Нужно ли перебирать подкаталоги каталога в глубину (depth), в ширину (breadth), или вообще не трогать (shallow).
bool followSymlink Символические ссылки, указывающие на каталоги, должны рассматриваться как каталоги, и итерации проводятся по их содержимому.
Исключения:
FileException, если каталог не существует.

Пример:

// Итерировать по каталогу в глубину
foreach (string name; dirEntries("destroy/me", SpanMode.depth))
{
    remove(name);
}

// Итерировать по текущему каталогу в ширину
foreach (string name; dirEntries("", SpanMode.breadth))
{
    writeln(name);
}

// Итерировать по каталогу и получить подробную информацию о нём
foreach (DirEntry e; dirEntries("dmd-testing", SpanMode.breadth))
{
    writeln(e.name, "\t", e.size);
}

// Перебрать все *.d-файлы в текущем каталоге и во всех его подкаталогах
auto dFiles = dirEntries("", SpanMode.depth).filter!(f => f.name.endsWith(".d"));
foreach (d; dFiles)
    writeln(d.name);

// Подключить его с помощью std.parallelism, чтобы скомпилировать их все параллельно:
foreach (d; parallel(dFiles, 1)) //Передаёт по 1 файлу в каждый поток
{
    string cmd = "dmd -c "  ~ d.name;
    writeln(cmd);
    std.process.system(cmd);
}

Примеры:
Продублировать функциональность std.file.listdir() из D1:
string[] listdir(string pathname)
{
    import std.file;
    import std.path;
    import std.algorithm;
    import std.array;

    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);
 }
auto dirEntries(string path, string pattern, SpanMode mode, bool followSymlink = true);
Удобная обёртка для фильтрации имен файлов с помощью шаблона pattern.
Параметры:
string path Каталог, по которому проходит итерирование.
string pattern Строка с шаблоном подстановки, например "*.d". Формат поддерживаемыех строк шаблонов подстановки описан в std.path.globMatch.
SpanMode mode Нужно ли перебирать подкаталоги каталога в глубину (depth), в ширину (breadth), или вообще не трогать (shallow).
bool followSymlink Символические ссылки, указывающие на каталоги, должны рассматриваться как каталоги, и итерации проводятся по их содержимому.
Исключения:
FileException, если каталог не существует.

Пример:

// Итерации по всем файлам с программами на D в текущем каталоге 
// и во всех его подкаталогах 
auto dFiles = dirEntries("","*.{d,di}",SpanMode.depth);
foreach (d; dFiles)
    writeln(d.name);

Select!(Types.length == 1, Types[0][], Tuple!Types[]) slurp(Types...)(string filename, in char[] format);
Читает файл построчно и анализирует строку в одно значение или в кортеж значений std.typecons.Tuple в зависимости от длины Types. Строки анализируются с использованием указанной строки format. Строка format передается в std.format.formattedRead и поэтому должна соответствовать спецификации форматной строки, указанной в format.
Параметры:
Types Типы каждого из возвращаемых элементов строк
string filename Имя читаемого файла
char[] format Строка формата, используемая при чтении
Возвращает:
Если передан только один тип, то массив элементов этого типа. В противном случае, массив кортежей std.typecons.Tuple.
Исключения:
Exception, если строка format сформирована с ошибками. Кроме того, выбрасывает Exception, если какая-либо из строк в файле полностью не обрабатывается вызовом std.format.formattedRead. Это означает, что пустые строки или строки с дополнительными символами не допускаются.
Примеры:
scope(exit)
{
    assert(exists(deleteme));
    remove(deleteme);
}

write(deleteme, "12 12.25\n345 1.125"); // deleteme – это имя временного файла

// Загрузить файл; Каждая строка представляет собой int, 
// за которым следует запятая, пробел и 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 string tempDir();
Возвращает путь к каталогу для временных файлов.
В Windows эта функция возвращает результат вызова функции Windows API GetTempPath.
На платформах POSIX он выполняет поиск по следующему списку каталогов и возвращает первый существующий:
  1. Каталог, заданный переменной среды TMPDIR.
  2. Каталог, заданный переменной среды TEMP.
  3. Каталог, заданный переменной среды TMP.
  4. /tmp
  5. /var/tmp
  6. /usr/tmp
На всех платформах, при сбое tempDir возвращает ".", представляющую текущий рабочий каталог.
Возвращаемое значение функции кэшируется, поэтому описанные выше процедуры будут выполняться только при первом вызове функции. Все последующие вызовы возвращают одну и ту же строку, независимо от того, изменились ли переменные окружения и структуры каталогов.
Алгоритм tempDir для POSIX основан на tempfile.tempdir языка Python.