Файлы представлены структурой File модуля std.stdio. Файл представляет собой последовательность байтов вне зависимости от того, является ли он текстовым или двоичным файлом.
Язык D предоставляет доступ как к высокоуровневым, так и к низкоуровневым (уровень OS) функциям для работы с файлами на ваших устройствах хранения.
Стандартные потоки ввода-вывода stdin и stdout уже открыты при запуске программ. Они готовы к использованию. С другой стороны, файлы необходимо сначала открыть, указав имя файла и необходимые права доступа.
File file = File(путь_к_файлу, "режим");
Здесь путь_к_файлу является строковым литералом с именем файла, а режим доступа может иметь одно из следующих значений:
№ | Режим и описание |
---|---|
1 | r Открывает существующий текстовый файл для чтения. |
2 | w Открывает текстовый файл для записи, если он не существует, создаётся новый файл. В этот момент ваша программа начнёт писать контент с самого начала файла. |
3 | a Открывает текстовый файл для записи в режиме добавления, если он не существует, создается новый файл. В этот момент ваша программа начнёт добавлять содержимое к существующему файлу. |
4 | r+ Открывает текстовый файл сразу для чтения и записи. |
5 | w+ Открывает текстовый файл сразу для чтения и записи. Если файл существует, то сначала он обрезается до нулевой длины, в противном случае файл создаётся. |
6 | a+ Открывает текстовый файл сразу для чтения и записи. Если файл не существует, он создаётся. Чтение начнётся с самого начала, но запись будет вестись только в режиме добавления. |
Чтобы закрыть файл, используйте функцию file.close(), где file содержит ссылку на файл.
file.close();
Любой файл, открытый программой, должен быть закрыт, когда программа закончит использовать этот файл. В большинстве случаев файлы не нужно закрывать явно; они автоматически закрываются при уничтожении объектов File.
file.writeln используется для записи в открытый файл.
file.writeln("привет");
import std.stdio; import std.file; void main() { File file = File("test.txt", "w"); file.writeln("привет"); file.close(); }
Когда этот код будет скомпилирован и выполнен, он создаст новый файл test.txt в каталоге, в котором он был запущен (в рабочем каталоге программы).
Следующий метод читает одну строку из файла:
string s = file.readln();
Ниже приведен полный пример с чтением и записью.
import std.stdio; import std.file; void main() { File file = File("test.txt", "w"); file.writeln("привет"); file.close(); file = File("test.txt", "r"); string s = file.readln(); writeln(s); file.close(); }
Когда вы скомпилируете и выполните эту программу, она запишет и прочитает файл, а затем выведет следующий результат:
привет
Вот ещё один пример, в котором файл читается до конца.
import std.stdio; import std.string; void main() { File file = File("test.txt", "w"); file.writeln("привет"); file.writeln("мир"); file.close(); file = File("test.txt", "r"); while (!file.eof()) { string line = chomp(file.readln()); writeln("строка - ", line); } }
Когда вы скомпилируете и выполните эту программу, она запишет файл, затем его прочитает и выведет следующий результат:
строка - привет строка - мир строка -
В приведенном выше примере вы можете увидеть пустую третью строку, так как writeln создаёт следующую строку после своего выполнения.