为什么filesstream.close不可用



我在这个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+等模式,因为在运行应用程序时可能不需要两者。(

有两个关键项目在发挥作用:

  1. FileStream类是标准C库函数的绑定(例如,open用于fopenread用于fread等(
  2. 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对象,您可以安全地打开该文件以便稍后再次读取。

相关内容

  • 没有找到相关文章

最新更新