方法

Gio文件replace

声明 [源码]

GFileOutputStream*
g_file_replace (
  GFile* file,
  const char* etag,
  gboolean make_backup,
  GFileCreateFlags flags,
  GCancellable* cancellable,
  GError** error
)

描述 [源码]

返回用于覆盖文件的输出流,可能会先创建文件的备份副本。如果文件不存在,则将其创建。

此方法会尝试以最安全的方式替换文件,以便在写入过程中发生的任何错误都不会影响现有文件的副本。例如,对于本地文件,它可能会写入一个临时文件,然后在流关闭时原子性地重命名目标。

默认情况下,创建的文件通常可供每个人读取,但如果在 flags 中传递 G_FILE_CREATE_PRIVATE,则文件将仅对当前用户可读,并达到目标文件系统支持的程度。

如果 cancellable 不是 NULL,则可以取消操作,方法是触发另一个线程中的可取消对象。如果操作被取消,则返回错误 G_IO_ERROR_CANCELLED

如果您传入一个非 NULLetag 值,并且文件已经存在,则该值将与此文件当前的最后修改时间戳进行比较,如果它们不同,则返回 G_IO_ERROR_WRONG_ETAG 错误。这通常意味着自您上次读取文件以来文件已被修改。您可以通过在完成写入并关闭 GFileOutputStream 后从 g_file_output_stream_get_etag() 获取新 etag。当您加载新文件时,可以使用 g_file_input_stream_query_info() 获取文件的 etag。

如果 make_backupTRUE,则此函数将在覆盖之前尝试备份当前文件。如果这失败,则将返回错误 G_IO_ERROR_CANT_CREATE_BACKUP。如果您仍然想要替换,请尝试再次设置 make_backupFALSE

如果文件是目录,则返回错误 G_IO_ERROR_IS_DIRECTORY,如果文件是其他类型的非常规文件,则返回错误 G_IO_ERROR_NOT_REGULAR_FILE。某些文件系统不允许所有文件名,可能返回 G_IO_ERROR_INVALID_FILENAME 错误,如果名称过长,则返回 G_IO_ERROR_FILENAME_TOO_LONG。其他错误也是可能的,并且取决于文件所在的文件类型。

参数

etag

类型: const char*

当前 GFile 的可选 实体标签,或 NULL 以忽略。

此参数可以是 NULL
数据由方法的调用者拥有。
此值是一个以 NUL 终止的 UTF-8 字符串。
make_backup

类型: gboolean

TRUE 表示应创建备份。

flags

类型: GFileCreateFlags

一组 GFileCreateFlags

cancellable

类型: GCancellable

可选的 GCancellable 对象,使用 NULL 表示忽略。

此参数可以是 NULL
数据由方法的调用者拥有。
错误

类型: GError **

用于可恢复错误的返回位置。

此参数可以是 NULL
如果返回位置不是 NULL,则必须将其初始化为 NULLGError*
如果没有错误,方法将使参数保持为 NULL 初始化。
发生错误时,参数将被设置为一个新的 GError;调用者将拥有这些数据并负责释放它们。

返回值

类型: GFileOutputStream

错误时为 GFileOutputStreamNULL。使用 g_object_unref() 释放返回的对象。

方法调用者将拥有返回的数据,并负责释放它。