文件是由std.stdio模塊的文件結(jié)構(gòu)來(lái)表示。
一個(gè)文件代表一個(gè)字節(jié)序列,不要緊,如果它是一個(gè)文本文件或二進(jìn)制文件。 D編程語(yǔ)言提供了高級(jí)功能的訪問(wèn),以及較低的水平(操作系統(tǒng)級(jí)別)調(diào)用來(lái)處理存儲(chǔ)設(shè)備的文件。
標(biāo)準(zhǔn)輸入和輸出流stdin和stdout已經(jīng)打開,當(dāng)程序開始運(yùn)行。他們已經(jīng)準(zhǔn)備好可以使用。另一方面,文件必須首先通過(guò)指定該文件的名稱以及所需的訪問(wèn)權(quán)限打開。
File file = File(filepath, "mode");
在這里,文件名是字符串文字,用它來(lái)命名文件和訪問(wèn)模式可以有下列值之一:
Mode | 描述 |
---|---|
r | 打開讀取目的,現(xiàn)有的文本文件。 |
w | 打開寫,如果它不存在,則創(chuàng)建一個(gè)新的文件的文本文件。在這里,程序?qū)㈤_始從文件的開頭寫的內(nèi)容。 |
a | 打開寫在追加模式,如果它不存在,則創(chuàng)建一個(gè)新的文件的文本文件。在這里,程序?qū)?dòng)附加在現(xiàn)有文件內(nèi)容的內(nèi)容。 |
r+ | 打開用于讀取和寫入文本文件。 |
w+ | 打開用于讀取和寫入兩個(gè)文本文件。它首先截?cái)嘣撐募L(zhǎng)度為零(如果存在),否則創(chuàng)建的文件,如果它不存在。 |
a+ | 打開用于讀取和寫入兩個(gè)文本文件。如果它不存在,創(chuàng)建該文件。該讀數(shù)將從頭開始寫,但只能??追加。 |
要關(guān)閉一個(gè)文件,請(qǐng)使用file.close()函數(shù)所在文件存放文件的參考。這個(gè)函數(shù)的原型為:
file.close();
當(dāng)程序使用完該文件已經(jīng)打開一個(gè)程序的任何文件都必須關(guān)閉。在大多數(shù)情況下,文件不需要被明確地關(guān)閉;它們會(huì)自動(dòng)關(guān)閉,當(dāng)文件對(duì)象會(huì)自動(dòng)終止。
file.writeln是用來(lái)寫一個(gè)打開的文件。
file.writeln("hello");
import std.stdio; import std.file; void main() { File file = File("test.txt", "w"); file.writeln("hello"); file.close(); }
當(dāng)上面的代碼被編譯并執(zhí)行,它會(huì)在它已開始下(在程序的工作目錄)目錄中的新文件test.txt。
下面是一個(gè)簡(jiǎn)單的方法來(lái)從文件中讀取一行:
string s = file.readln();
讀取和寫入一個(gè)完整的示例如下所示。
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(); }
當(dāng)上面的代碼被編譯并執(zhí)行,它在讀取上一節(jié)中創(chuàng)建的文件,并產(chǎn)生以下結(jié)果:
hello
這里是另一個(gè)例子,用于讀取文件,直到文件結(jié)束。
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); } }
當(dāng)上面的代碼被編譯并執(zhí)行,它在讀取上一節(jié)中創(chuàng)建的文件,并產(chǎn)生以下結(jié)果:
line -hello line -world line -
可以在上面的例子中看到一個(gè)空的第三行,因?yàn)橐坏┧粓?zhí)行writeln需要到下一行。