go - 将可执行的 golang 文件复制到另一个文件夹
问题描述
我想知道是否可以将正在运行的 .exe 文件复制到另一个文件夹。我正在尝试使用 Go 中通常的复制方法来做到这一点。
func copy(src, dst string) error {
in, err := os.Open(src)
if err != nil {
return err
}
defer in.Close()
out, err := os.Create(dst)
if err != nil {
return err
}
defer out.Close()
_, err = io.Copy(out, in)
if err != nil {
return err
}
return out.Close()
}
...
copyErr := copy(os.Args[0], "D:"+"\\"+"whs.exe")
if copyErr != nil {
log.Panicf("copy -> %v", copyErr)
}
以相同大小复制的文件,但我无法正确打开它。我只有一个快速的 cmd flash。几毫秒后, cmd 正在关闭,我什至看不到任何错误。我试图将错误写入日志文件,但它是空的。
f, err := os.OpenFile("debug.log", os.O_RDWR|os.O_CREATE|os.O_APPEND, 0777)
if err != nil {
log.Panicf("setLogOutput -> %v", err)
}
defer f.Close()
log.SetOutput(f)
如果我打开未复制的 .exe 文件,一切正常。
我已经将我的程序减少到只有一种主要方法。结果是一样的。
func main() {
log.Println("Starting...")
copyErr := copy(os.Args[0], "F:"+"\\"+"whs.exe")
if copyErr != nil {
log.Panicf("copy -> %v", copyErr)
}
os.Stdin.Read([]byte{0})
}
解决方案
我发现了一个错误。
该进程无法访问该文件,因为它正被另一个进程使用。
我试图将 .exe 文件复制到它自己的路径。
func copy(src, dst string) error {
if _, err := os.Stat(dst); os.IsNotExist(err) {
in, err := os.Open(src)
if err != nil {
return err
}
defer in.Close()
out, err := os.Create(dst)
if err != nil {
return err
}
defer out.Close()
_, err = io.Copy(out, in)
if err != nil {
return err
}
}
return nil
}
推荐阅读
- python - 停止脚本的热键 - Python
- google-cloud-firestore - 使用虚幻引擎蓝图将数据写入 Firebase Firestore 的最佳方法?
- java - 我从 MySQL 获取数据以显示在 jTable 中,但出现异常
- python - 如何为具有多个数字列的给定 pandas 数据框创建排名表?
- java - 在 Java 中创建一个大的(例如 450MB+)bloomfilter
- python - Statsmodels 库的说明
- amazon-web-services - 限制上传 s3 存储桶上的任何其他文件,除了为其生成预签名 url 的文件
- node.js - 验证 nodejs 和 mongodb 中的现有元素
- python - mlp 模型参数和 opendata 预测的总体指南
- amazon-web-services - 用于部署的 React、S3 和 CloudFront 版本控制