From 44c3f5e1e83610e10b3080cec7023e963bd2e18c Mon Sep 17 00:00:00 2001 From: Nick Craig-Wood Date: Thu, 17 Oct 2024 11:26:46 +0100 Subject: [PATCH] vfs: add vfs.WriteFile to match os.WriteFile --- vfs/vfs.go | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/vfs/vfs.go b/vfs/vfs.go index 40d48b5b1..245aaa03f 100644 --- a/vfs/vfs.go +++ b/vfs/vfs.go @@ -770,6 +770,21 @@ func (vfs *VFS) ReadFile(filename string) (b []byte, err error) { return io.ReadAll(f) } +// WriteFile writes data to the named file, creating it if necessary. If the +// file does not exist, WriteFile creates it with permissions perm (before +// umask); otherwise WriteFile truncates it before writing, without changing +// permissions. Since WriteFile requires multiple system calls to complete, +// a failure mid-operation can leave the file in a partially written state. +func (vfs *VFS) WriteFile(name string, data []byte, perm os.FileMode) (err error) { + fh, err := vfs.OpenFile(name, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, perm) + if err != nil { + return err + } + defer fs.CheckClose(fh, &err) + _, err = fh.Write(data) + return err +} + // AddVirtual adds the object (file or dir) to the directory cache func (vfs *VFS) AddVirtual(remote string, size int64, isDir bool) (err error) { remote = strings.TrimRight(remote, "/")