先使用io.Copy实现文件拷贝,再结合os.Rename与copyFile+os.Remove实现安全移动。示例包含打开源文件、创建目标文件、同步数据及错误处理;移动时优先尝试原子重命名,失败则跨设备拷贝并删除原文件,需注意目标目录存在、权限保留及大文件优化等细节。

在Go语言中,文件的拷贝和移动是常见的操作,虽然标准库没有直接提供
Copy
Move
os
io
文件拷贝的核心是读取源文件内容并写入目标路径。推荐使用
io.Copy
func copyFile(src, dst string) error {
sourceFile, err := os.Open(src)
if err != nil {
return err
}
defer sourceFile.Close()
destFile, err := os.Create(dst)
if err != nil {
return err
}
defer destFile.Close()
_, err = io.Copy(destFile, sourceFile)
if err != nil {
return err
}
err = destFile.Sync()
return err
}
说明:
- 使用
os.Open
os.Create
io.Copy
Sync
文件移动本质上是先拷贝再删除原文件,但若在同一文件系统中,可直接调用
os.Rename
func moveFile(src, dst string) error {
err := os.Rename(src, dst)
if err == nil {
return nil // 成功:同一分区内的移动
}
// 失败可能是跨设备,尝试拷贝+删除
err = copyFile(src, dst)
if err != nil {
return err
}
return os.Remove(src)
}
注意:
-
os.Rename
实际开发中还需考虑更多边界情况。
立即学习“go语言免费学习笔记(深入)”;
os.Stat
os.MkdirAll
Mode()
Create
io.Copy
Create
基本上就这些。Go的标准库足够完成基础文件操作,关键在于正确处理错误和边界条件。不复杂但容易忽略细节。
以上就是Golang文件拷贝与移动操作方法的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号