1
0
mirror of https://github.com/rclone/rclone.git synced 2025-12-06 00:03:32 +00:00

vfs: fix renaming/deleting open files with cache mode "writes" under Windows

Before this change, renaming and deleting of open files (which can
easily happen due to the asynchronous nature of file systems) would
produce an error, for example saving files with Firefox.

After this change we open files with the flags necessary for open
files to be renamed or deleted.

Fixes #2730
This commit is contained in:
Nick Craig-Wood
2019-01-07 14:49:27 +00:00
parent 42d997f639
commit 71e98ea584
3 changed files with 12 additions and 7 deletions

View File

@@ -15,6 +15,8 @@ import (
"log"
"os"
"strings"
"github.com/ncw/rclone/lib/file"
)
// Interprets err into a vfs error
@@ -45,7 +47,7 @@ func test(fileName string, flags int, mode string) {
if !os.IsNotExist(err) {
log.Fatalf("File must not exist")
}
f, openNonExistentErr := os.OpenFile(fileName, flags, 0666)
f, openNonExistentErr := file.OpenFile(fileName, flags, 0666)
var readNonExistentErr error
var writeNonExistentErr error
@@ -65,7 +67,7 @@ func test(fileName string, flags int, mode string) {
}
// write the file
f, err = os.Create(fileName)
f, err = file.Create(fileName)
if err != nil {
log.Fatalf("failed to create: %v", err)
}
@@ -81,7 +83,7 @@ func test(fileName string, flags int, mode string) {
// then open file and try with file existing
f, openExistingErr := os.OpenFile(fileName, flags, 0666)
f, openExistingErr := file.OpenFile(fileName, flags, 0666)
var readExistingErr error
var writeExistingErr error
if openExistingErr == nil {
@@ -100,7 +102,7 @@ func test(fileName string, flags int, mode string) {
}
// read the file
f, err = os.Open(fileName)
f, err = file.Open(fileName)
if err != nil {
log.Fatalf("failed to open: %v", err)
}