Writes all of @contents to a file named @filename, with good error checking.
If a file called @filename already exists it will be overwritten.
This write is atomic in the sense that it is first written to a temporary
file which is then renamed to the final name. Notes:
- On UNIX, if @filename already exists hard links to @filename will break.
Also since the file is recreated, existing permissions, access control
lists, metadata etc. may be lost. If @filename is a symbolic link,
the link itself will be replaced, not the linked file.
- On UNIX, if @filename already exists and is non-empty, and if the system
supports it (via a journalling filesystem or equivalent), the fsync()
call (or equivalent) will be used to ensure atomic replacement: @filename
will contain either its old contents or @contents, even in the face of
system power loss, the disk being unsafely removed, etc.
- On UNIX, if @filename does not already exist or is empty, there is a
possibility that system power loss etc. after calling this function will
leave @filename empty or full of NUL bytes, depending on the underlying
filesystem.
- On Windows renaming a file will not remove an existing file with the
new name, so on Windows there is a race condition between the existing
file being removed and the temporary file being renamed.
- On Windows there is no way to remove a file that is open to some
process, or mapped into memory. Thus, this function will fail if
@filename already exists and is open.
If the call was successful, it returns %TRUE. If the call was not successful,
it returns %FALSE and sets @error. The error domain is #G_FILE_ERROR.
Possible error codes are those in the #GFileError enumeration.
Note that the name for the temporary file is constructed by appending up
to 7 characters to @filename.
Writes all of @contents to a file named @filename, with good error checking. If a file called @filename already exists it will be overwritten.
This write is atomic in the sense that it is first written to a temporary file which is then renamed to the final name. Notes:
- On UNIX, if @filename already exists hard links to @filename will break. Also since the file is recreated, existing permissions, access control lists, metadata etc. may be lost. If @filename is a symbolic link, the link itself will be replaced, not the linked file.
- On UNIX, if @filename already exists and is non-empty, and if the system supports it (via a journalling filesystem or equivalent), the fsync() call (or equivalent) will be used to ensure atomic replacement: @filename will contain either its old contents or @contents, even in the face of system power loss, the disk being unsafely removed, etc.
- On UNIX, if @filename does not already exist or is empty, there is a possibility that system power loss etc. after calling this function will leave @filename empty or full of NUL bytes, depending on the underlying filesystem.
- On Windows renaming a file will not remove an existing file with the new name, so on Windows there is a race condition between the existing file being removed and the temporary file being renamed.
- On Windows there is no way to remove a file that is open to some process, or mapped into memory. Thus, this function will fail if @filename already exists and is open.
If the call was successful, it returns %TRUE. If the call was not successful, it returns %FALSE and sets @error. The error domain is #G_FILE_ERROR. Possible error codes are those in the #GFileError enumeration.
Note that the name for the temporary file is constructed by appending up to 7 characters to @filename.