方法
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
。
如果您传入一个非 NULL
的 etag
值,并且文件已经存在,则该值将与此文件当前的最后修改时间戳进行比较,如果它们不同,则返回 G_IO_ERROR_WRONG_ETAG
错误。这通常意味着自您上次读取文件以来文件已被修改。您可以通过在完成写入并关闭 GFileOutputStream
后从 g_file_output_stream_get_etag()
获取新 etag。当您加载新文件时,可以使用 g_file_input_stream_query_info()
获取文件的 etag。
如果 make_backup
为 TRUE
,则此函数将在覆盖之前尝试备份当前文件。如果这失败,则将返回错误 G_IO_ERROR_CANT_CREATE_BACKUP
。如果您仍然想要替换,请尝试再次设置 make_backup
为 FALSE
。
如果文件是目录,则返回错误 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
,则必须将其初始化为NULL
的GError*
。如果没有错误,方法将使参数保持为 NULL
初始化。发生错误时,参数将被设置为一个新的 GError
;调用者将拥有这些数据并负责释放它们。