gpt4 book ai didi

c - 相当于 GLib 中的 open(O_WRONLY | O_CREAT)?

转载 作者:行者123 更新时间:2023-12-02 09:12:35 29 4
gpt4 key购买 nike

我需要打开一个文件进行写入。如果文件已经存在,我不想截断它。

换句话说,在纯 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返回 GFileOutputStreamGFileIOStream,但我看不出有什么能满足我的要求。

我错过了什么吗?

我需要把这个简单的任务分成几个小任务吗? (检查文件是否存在;如果存在,则创建,否则打开;全部以某种方式包裹在锁中。)

(顺便说一句,如果重要的话:我的文件将驻留在本地文件系统上,而不是网络文件系统上。另外,我在 Vala 工作,这就是为什么我不简单地使用 open()(也许我可以找到它的绑定(bind),但我更喜欢学习 GIO 做事的方式)。

最佳答案

我最终分两步完成了这项工作。我使用了@usr 的检查G_IO_ERROR_EXISTS 的建议。我的代码:

public class Downloader {

public FileIOStream iostream;

public OutputStream output { get { return iostream.output_stream; } }

public void create_output_file() throws Error
{
File file = File.new_for_path("output.bin");
try {
// If file doesn't exist.
iostream = file.create_readwrite(NONE);
} catch (Error e) {
if (e is IOError.EXISTS)
// It exists.
iostream = file.open_readwrite();
else
throw e;
}
}

}

(这里可能存在竞争条件,但这与我的情况无关。)

关于c - 相当于 GLib 中的 open(O_WRONLY | O_CREAT)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50452078/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com