D 编程 - 文件 I/O



文件由 `std.stdio` 模块的 `File` 结构体表示。文件表示字节序列,无论是文本文件还是二进制文件。

D 编程语言提供对高级函数以及低级(操作系统级)调用的访问,以处理存储设备上的文件。

在 D 语言中打开文件

程序运行时,标准输入和输出流 `stdin` 和 `stdout` 已经打开并可供使用。另一方面,必须首先通过指定文件名和所需的访问权限来打开文件。

File file = File(filepath, "mode");

这里,`filename` 是字符串字面量,用于命名文件,`access mode` 可以具有以下值之一:

序号 模式及描述
1

r

以只读方式打开现有文本文件。

2

w

以写入方式打开文本文件;如果文件不存在,则创建新文件。程序将从文件开头开始写入内容。

3

a

以追加方式打开文本文件;如果文件不存在,则创建新文件。程序将把内容追加到现有文件内容之后。

4

r+

以读写方式打开文本文件。

5

w+

以读写方式打开文本文件;如果文件存在,则先将其截断为零长度;如果文件不存在,则创建文件。

6

a+

以读写方式打开文本文件;如果文件不存在,则创建文件。读取将从开头开始,但写入只能追加。

在 D 语言中关闭文件

要关闭文件,请使用 `file.close()` 函数,其中 `file` 持有文件引用。此函数的原型为:

file.close();

程序打开的任何文件都必须在程序使用完该文件后关闭。在大多数情况下,无需显式关闭文件;当 `File` 对象终止时,它们会自动关闭。

在 D 语言中写入文件

`file.writeln` 用于写入打开的文件。

file.writeln("hello"); 

import std.stdio; 
import std.file;
  
void main() { 
   File file = File("test.txt", "w"); 
   file.writeln("hello");
   file.close(); 
}

编译并执行上述代码后,将在启动它的目录(程序工作目录)中创建一个名为 `test.txt` 的新文件。

在 D 语言中读取文件

以下方法从文件中读取一行:

string s = file.readln();

下面是一个完整的读写示例。

import std.stdio; 
import std.file; 
 
void main() { 
   File file = File("test.txt", "w");
   file.writeln("hello");  
   file.close(); 
   file = File("test.txt", "r"); 
   
   string s = file.readln(); 
   writeln(s);
   
   file.close(); 
} 

编译并执行上述代码后,它将读取上一节中创建的文件,并产生以下结果:

hello

这是另一个读取文件直到文件结尾的示例。

import std.stdio;
import std.string;

void main() { 
   File file = File("test.txt", "w");  
   file.writeln("hello"); 
   file.writeln("world");  
   file.close();  
   file = File("test.txt", "r"); 
    
   while (!file.eof()) { 
      string line = chomp(file.readln()); 
      writeln("line -", line); 
   }
} 

编译并执行上述代码后,它将读取上一节中创建的文件,并产生以下结果:

line -hello 
line -world 
line -

您可以在上面的示例中看到一个空的第三行,因为 `writeln` 执行后会将其移到下一行。

广告