Returns an output stream for overwriting the file, possibly creating a backup copy of the file first.
If the file doesn't exist, it will be created.
This will try to replace the file in the safest way possible so that any errors during the writing will not affect an already existing copy of the file. For instance, for local files it may write to a temporary file and then atomically rename over the destination when the stream is closed.
By default files created are generally readable by everyone, but if you pass g_file_create_private in
flags
the file will be made readable only to the current user, to the level that is supported on the target filesystem.
If cancellable
is not null, then the operation can be cancelled by triggering the
cancellable object from another thread. If the operation was cancelled, the error g_io_error_cancelled
will be returned.
If you pass in a non-null etag
value and this already
exists, then this value is compared to the current entity tag of the file, and if they differ an
g_io_error_wrong_etag error is returned. This generally means that the file has been changed since you last read it. You can get
the new etag from get_etag after you've finished writing and
closed the FileOutputStream. When you load a new file you can use
query_info to get the etag of the file.
If make_backup
is true, this function will attempt to make a backup of the current file
before overwriting it. If this fails a g_io_error_cant_create_backup error will be returned. If you want
to replace anyway, try again with make_backup
set to false.
If the file is a directory the g_io_error_is_directory error will be returned, and if the file is some other form of non-regular file then a g_io_error_not_regular_file error will be returned. Some file systems don't allow all file names, and may return an g_io_error_invalid_filename error, and if the name is to long g_io_error_filename_too_long will be returned. Other errors are possible too, and depend on what kind of filesystem the file is on.
Example: Replace file-content (stream-based), sync:
public static int main (string[] args) {
if (args.length != 2) {
print ("%s FILE\n", args[0]);
return 0;
}
try {
File file = File.new_for_commandline_arg (args[1]);
FileOutputStream ostream = file.replace (null, false, FileCreateFlags.NONE);
DataOutputStream dostream = new DataOutputStream (ostream);
dostream.put_string ("my-line\n");
} catch (Error e) {
print ("Error: %s\n", e.message);
}
return 0;
}
valac --pkg gio-2.0 GLib.File.replace.vala
this |
input File |
etag |
an optional entity tag for the current File, or |
make_backup |
true if a backup should be created |
flags |
a set of FileCreateFlags |
cancellable |
optional Cancellable object, null to ignore |
a FileOutputStream or null on error. Free the returned object with unref. |