我在此 Vala 檔案頁面上看到以下代碼示例:
public static int main (string[] args) {
// Opens "foo.txt" for reading ("r")
FileStream stream = FileStream.open ("foo.txt", "r");
assert (stream != null);
// buffered:
char buf[100];
while (stream.gets (buf) != null) {
print ((string) buf);
}
return 0;
}
但是,我找不到close()功能。我想打開檔案一次讀取,然后再打開一次寫入。在沒有中間間隔的情況下這樣做是否安全?
(我不想使用a 允許讀取和寫入的 etc 模式,因為在運行應用程式時可能不需要兩者。)
uj5u.com熱心網友回復:
有兩個關鍵專案在起作用:
- 該類
FileStream是對標準 C 庫函式(例如openforfopen、readforfread等)的系結。(有關各種檔案 API 的詳細概述,請參閱:此 Stack Overflow 答案) - Vala 會自動進行參考計數,并會為您釋放物件(請參閱:Vala 的記憶體管理解釋)。
現在,如果我們查看FileStream Vala系結的定義,我們會看到:
[ CCode ( cname = "FILE" , free_function = "fclose" ) ]
public class FileStream
注意free_function = "fclose"部分。這意味著當 Vala 需要釋放一個FileStream物件時,它會隱式呼叫fclose. 因此無需手動嘗試。(另請參閱:在定義類部分下撰寫 VAPI 檔案free_function以獲取詳細資訊)
這對您意味著,一旦您的stream物件超出范圍,參考計數達到 0 等,它將像您期望的任何其他物件一樣為您清理。FileStream.open您可以通過使用和獲取新FileStream物件安全地打開檔案以供稍后再次閱讀。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/511795.html
標籤:文件开放文件流瓦拉关闭
