【发布时间】:2018-10-31 07:13:26
【问题描述】:
我需要打开一个文件进行写入。如果文件已经存在,我不想截断它。
换句话说,在纯 C 中我会这样做:
int fd = open("output.bin", O_WRONLY | O_CREAT, 0666);
// I don't mind using O_RDWR, btw.
我正在尝试使用 GLib 的 GFile(GIO 的一部分)做类似的事情。我第一次尝试:
g_file_create(gfile, G_FILE_CREATE_NONE, NULL, NULL);
但是如果文件已经存在则失败。
我看到有about 5 other functions 会返回GFileOutputStream 或GFileIOStream,但我看不到有一个可以满足我的要求。
我错过了什么吗?
我需要把这个简单的任务分成几个小任务吗? (检查文件是否存在;如果存在,则创建,否则打开;都以某种方式包裹在锁中。)
(顺便说一句,如果重要的话:我的文件将驻留在本地文件系统上,而不是网络文件系统上。另外,我在 Vala 工作,这就是为什么我不简单地使用 open() (也许我可以找到绑定它,但我更喜欢学习 GIO 的做事方式)。)
【问题讨论】:
-
好像没有这个功能。也许您可以检查
g_file_create的返回码是否为G_IO_ERROR_EXISTS,而不是将其视为失败?