class
FileException
:
object.Exception;
Исключение, вызываемое ошибками ввода-вывода файлов.
Код ошибки операционной системы.
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 |
если присутствует, то определяет максимальное количество прочитанных байтов |
Возвращает: Нетипизированный массив прочитанных байтов.
Примеры: import std.utf : byChar;
scope(exit)
{
assert(exists(deleteme));
remove(deleteme);
}
write(deleteme, "1234"); writeln(read(deleteme, 2)); writeln(read(deleteme.byChar)); writeln((cast(const(ubyte)[])read(deleteme)).length);
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"); 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); writeln(cast(int[])read(deleteme));
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); int[] b = [ 13, 21 ];
append(deleteme, b);
writeln(cast(int[])read(deleteme));
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 в случае ошибки.
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
{
}
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);
Возвращает, является ли данный файл каталогом.
Возвращает: 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 для получения дополнительной информации.
Возвращает: 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).
Возвращает: 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 в случае ошибки.
Получить текущий рабочий каталог.
Исключения: FileException в случае ошибки.
@trusted string
thisExePath
();
Возвращает полный путь к текущему исполняемому файлу.
Информация о файле, аналогичная той, что вы получаете от команды stat в системе Posix.
Создаёт 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");
Возвращает, является ли файл, представленный этим DirEntry, каталогом.
Пример:
auto de1 = DirEntry("/etc/fonts/fonts.conf");
assert(!de1.isDir);
auto de2 = DirEntry("/usr/share/include");
assert(de2.isDir);
Возвращает, является ли файл, представленный этим 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).
Возвращает размер файла, представленного этим 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 в случае ошибки.
void
rmdirRecurse
(in char[]
pathname
);
Удалить каталог, всё его содержимое, и, рекурсивно, подкаталоги.
Исключения: FileException в случае ошибки (в том числе, если данный файл не является каталогом).
void
rmdirRecurse
(ref DirEntry
de
);
void
rmdirRecurse
(DirEntry
de
);
Удалить каталог, всё его содержимое, и, рекурсивно, подкаталоги.
Исключения: FileException в случае ошибки (в том числе, если данный файл не является каталогом).
Задаёт политику обхода каталога для функции dirEntries (см. ниже).
Обходит только сам каталог.
Задаёт обход каталога в глубину, т. е. содержимое любого подкаталога возвращается до самого этого подкаталога. Полезно, например, при рекурсивном удалении файлов.
Задаёт обход каталога в ширину, т. е. содержимое любого подкаталога возвращается непосредственно после самого этого подкаталога.
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);
}
auto dFiles = dirEntries("", SpanMode.depth).filter!(f => f.name.endsWith(".d"));
foreach (d; dFiles)
writeln(d.name);
foreach (d; parallel(dFiles, 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, если каталог не существует.
Пример:
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");
auto a = slurp!(int, double)(deleteme, "%s %s");
writeln(a.length); writeln(a[0]); writeln(a[1]);
@trusted string
tempDir
();
Возвращает путь к каталогу для временных файлов.
В Windows эта функция возвращает результат вызова функции Windows API
GetTempPath.
На платформах POSIX он выполняет поиск по следующему списку каталогов и возвращает первый существующий:
- Каталог, заданный переменной среды TMPDIR.
- Каталог, заданный переменной среды TEMP.
- Каталог, заданный переменной среды TMP.
- /tmp
- /var/tmp
- /usr/tmp
На всех платформах, при сбое
tempDir
возвращает
".", представляющую текущий рабочий каталог.
Возвращаемое значение функции кэшируется, поэтому описанные выше процедуры будут выполняться только при первом вызове функции. Все последующие вызовы возвращают одну и ту же строку, независимо от того, изменились ли переменные окружения и структуры каталогов.
Алгоритм
tempDir
для POSIX основан на
tempfile.tempdir языка Python.