D語言檔案I/O


檔案是由std.stdio模組的檔案結構來表示。

一個檔案代表一個位元組序列,不要緊,如果它是一個文字檔案或二進位制檔案。 D程式設計語言提供了高階功能的存取,以及較低的水平(作業系統級別)呼叫來處理儲存裝置的檔案。

開啟檔案

標準輸入和輸出流stdin和stdout已經開啟,當程式開始執行。他們已經準備好可以使用。另一方面,檔案必須首先通過指定該檔案的名稱以及所需的存取許可權開啟。

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

在這裡,檔案名是字串文字,用它來命名檔案和存取模式可以有下列值之一:

Mode 描述
r 開啟讀取目的,現有的文字檔案。
w 開啟寫,如果它不存在,則建立一個新的檔案的文字檔案。在這裡,程式將開始從檔案的開頭寫的內容。
a 開啟寫在追加模式,如果它不存在,則建立一個新的檔案的文字檔案。在這裡,程式將啟動附加在現有檔案內容的內容。
r+ 開啟用於讀取和寫入文字檔案。
w+ 開啟用於讀取和寫入兩個文字檔案。它首先截斷該檔案長度為零(如果存在),否則建立的檔案,如果它不存在。
a+ 開啟用於讀取和寫入兩個文字檔案。如果它不存在,建立該檔案。該讀數將從頭開始寫,但只能??追加。

關閉一個檔案

要關閉一個檔案,請使用file.close()函式所在檔案存放檔案的參考。這個函式的原型為:

file.close();

當程式使用完該檔案已經開啟一個程式的任何檔案都必須關閉。在大多數情況下,檔案不需要被明確地關閉;它們會自動關閉,當檔案物件會自動終止。

寫入檔案

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。

讀取檔案

下面是一個簡單的方法來從檔案中讀取一行:

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需要到下一行。