golang os.Rename 时出现错误,不能跨磁盘移动文件解决方法!

在 windows 下跨卷使用 os.Rename 时会报错:golang cannot move the file to a different disk drive.

不能直接跨卷/分区使用,可以使用以下方法实现跨卷/分区的文件移动。

实现逻辑:在目标位置新建一个空文件,使用 io.Copy 拷贝数据到新文件里后,删除源文件。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
// MoveFile 实现跨卷/分区移动文件
func MoveFile(sourcePath, destPath string) error {
	inputFile, err := os.Open(sourcePath)
	if err != nil {
		return fmt.Errorf("Couldn't open source file: %s", err)
	}
	outputFile, err := os.Create(destPath)
	if err != nil {
		inputFile.Close()
		return fmt.Errorf("Couldn't open dest file: %s", err)
	}
	defer outputFile.Close()
	_, err = io.Copy(outputFile, inputFile)
	inputFile.Close()
	if err != nil {
		return fmt.Errorf("Writing to output file failed: %s", err)
	}
	// The copy was successful, so now delete the original file
	err = os.Remove(sourcePath)
	if err != nil {
		return fmt.Errorf("Failed removing original file: %s", err)
	}
	return nil
}