feat: make cross device moves possible

This commit is contained in:
Jan Bader 2025-01-03 00:26:43 +01:00
parent 051e257fba
commit 6c38703cf2
2 changed files with 41 additions and 1 deletions

View File

@ -230,7 +230,7 @@ func handleExistingFile(cfg config, fileExistsResponse FileExistsResult) error {
subfolder := fmt.Sprintf("%s %s - %s.%s", date.Format("20060102"), corr, itemName, extension) subfolder := fmt.Sprintf("%s %s - %s.%s", date.Format("20060102"), corr, itemName, extension)
newPath := filepath.Join(curDir, subfolder) newPath := filepath.Join(curDir, subfolder)
if err := os.Rename(fileExistsResponse.File, newPath); err != nil { if err := MoveFile(fileExistsResponse.File, newPath); err != nil {
return fmt.Errorf("move file: %w", err) return fmt.Errorf("move file: %w", err)
} }

40
util.go Normal file
View File

@ -0,0 +1,40 @@
package main
import (
"fmt"
"io"
"os"
)
// MoveFile moves a file across file system boundaries
// taken from https://stackoverflow.com/questions/50740902/move-a-file-to-a-different-drive-with-go
func MoveFile(sourcePath, destPath string) error {
inputFile, err := os.Open(sourcePath)
if err != nil {
return fmt.Errorf("Couldn't open source file: %w", err)
}
defer inputFile.Close()
outputFile, err := os.Create(destPath)
if err != nil {
return fmt.Errorf("Couldn't open dest file: %w", err)
}
defer outputFile.Close()
_, err = io.Copy(outputFile, inputFile)
if err != nil {
return fmt.Errorf("Couldn't copy to dest from source: %w", err)
}
// for Windows, close before trying to remove: https://stackoverflow.com/a/64943554/246801
err = inputFile.Close()
if err != nil {
return fmt.Errorf("Couldn't close input: %w", err)
}
err = os.Remove(sourcePath)
if err != nil {
return fmt.Errorf("Couldn't remove source file: %w", err)
}
return nil
}