Файловый ввод/вывод


Предыдущая страница
Следующая страница  

Файлы представлены структурой File модуля std.stdio. Файл представляет собой последовательность байтов вне зависимости от того, является ли он текстовым или двоичным файлом.

Язык D предоставляет доступ как к высокоуровневым, так и к низкоуровневым (уровень OS) функциям для работы с файлами на ваших устройствах хранения.

Открытие файлов в D

Стандартные потоки ввода-вывода stdin и stdout уже открыты при запуске программ. Они готовы к использованию. С другой стороны, файлы необходимо сначала открыть, указав имя файла и необходимые права доступа.

File file = File(путь_к_файлу, "режим");

Здесь путь_к_файлу является строковым литералом с именем файла, а режим доступа может иметь одно из следующих значений:

Режим и описание
1

r

Открывает существующий текстовый файл для чтения.

2

w

Открывает текстовый файл для записи, если он не существует, создаётся новый файл. В этот момент ваша программа начнёт писать контент с самого начала файла.

3

a

Открывает текстовый файл для записи в режиме добавления, если он не существует, создается новый файл. В этот момент ваша программа начнёт добавлять содержимое к существующему файлу.

4

r+

Открывает текстовый файл сразу для чтения и записи.

5

w+

Открывает текстовый файл сразу для чтения и записи. Если файл существует, то сначала он обрезается до нулевой длины, в противном случае файл создаётся.

6

a+

Открывает текстовый файл сразу для чтения и записи. Если файл не существует, он создаётся. Чтение начнётся с самого начала, но запись будет вестись только в режиме добавления.

Закрытие файлов в D

Чтобы закрыть файл, используйте функцию 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 создаёт следующую строку после своего выполнения.


Предыдущая страница
Следующая страница