【问题标题】:Why filestream.close not available为什么 filestream.close 不可用
【发布时间】:2022-10-05 23:12:21
【问题描述】:

我在this Vala documentation page 上看到以下代码示例:

public static int main (string[] args) {
    // Opens \"foo.txt\" for reading (\"r\")
    FileStream stream = FileStream.open (\"filestream.vala\", \"r\");
    assert (stream != null);

    // buffered:
    char buf[100];
    while (stream.gets (buf) != null) {
        print ((string) buf);
    }

    return 0;
}

但是,我找不到close() 函数。我想打开文件一次读取,然后再打开一次写入。在没有中间间隔的情况下这样做是否安全?

(我不想使用a+ 等允许读取和写入的模式,因为在运行应用程序时可能不需要两者。)

    标签: file fopen filestream vala fclose


    【解决方案1】:

    有两个关键项目在起作用:

    1. FileStream 类是对标准 C 库函数的绑定(例如,open 用于 fopenread 用于 fread 等)。 (请参阅:this Stack Overflow answer 以获得对各种文件 API 的全面了解)
    2. Vala 会自动进行引用计数并为您释放对象(请参阅:Vala's Memory Management Explained)。

      现在,如果我们查看 FileStream Vala 绑定的定义,我们会看到:

      [ CCode ( cname = "FILE" , free_function = "fclose" ) ]
      public class FileStream
      

      注意free_function = "fclose" 部分。这意味着当 Vala 释放 FileStream 对象时,它会隐式调用 fclose。因此无需手动尝试。 (有关free_function 的详细信息,另请参阅:定义类部分下的Writing VAPI files

      这对您意味着,一旦您的 stream 对象超出范围,引用计数达到 0 等,它将像您期望的任何其他对象一样为您清理。您可以通过使用FileStream.open 并获取新的FileStream 对象来安全地打开文件以供稍后再次阅读。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-01-03
      • 1970-01-01
      • 1970-01-01
      • 2023-02-01
      • 1970-01-01
      • 2020-03-20
      • 1970-01-01
      相关资源
      最近更新 更多