分别使用和不使用buff来复制文件,将可能造成mov视频文件有不知名错误。
以下为一般的拷贝并删除方法,拷贝后的文件没有错误。
func CutFileCom(srcFilePath string, dstFilePath string) error {
srcFile, err := os.Open(srcFilePath)
if err != nil {
fmt.Printf("打开源文件错误,错误信息=%v\n", err)
return err
}
//defer srcFile.Close()
dstFile, err := os.OpenFile(dstFilePath, os.O_WRONLY|os.O_CREATE, 0777)
if err != nil {
fmt.Printf("打开目标文件错误,错误信息=%v\n", err)
return err
}
defer dstFile.Close()
_, err = io.Copy(dstFile, srcFile)
if err != nil {
fmt.Printf("复制目标文件错误,错误信息=%v\n", err)
return err
}
//删除
srcFile.Close()
err = os.Remove(srcFilePath)
if err != nil {
fmt.Printf("删除目标文件错误,错误信息=%v\n", err)
return err
}
err = nil
return err
}
以下为使用bufio方法复制并删除文件,其它文件暂未发现有什么问题,主要是mov视频文件用此方法拷贝后将无法使用windows10自带播放器播放,会提示出错,也不会生成缩略图;只能使用potplayer打开。
func CutFileBufio(srcFilePath string, dstFilePath string) error {
srcFile, err := os.Open(srcFilePath)
if err != nil {
fmt.Printf("打开源文件错误,错误信息=%v\n", err)
return err
}
reader := bufio.NewReader(srcFile)
dstFile, err := os.OpenFile(dstFilePath, os.O_WRONLY|os.O_CREATE, 0777)
if err != nil {
fmt.Printf("打开目标文件错误,错误信息=%v\n", err)
return err
}
writer := bufio.NewWriter(dstFile)
defer dstFile.Close()
_, err = io.Copy(writer, reader)
if err != nil {
fmt.Printf("复制目标文件错误,错误信息=%v\n", err)
return err
}
//删除
srcFile.Close()
err = os.Remove(srcFilePath)
if err != nil {
fmt.Printf("删除目标文件错误,错误信息=%v\n", err)
return err
}
err = nil
return err
}

本文探讨了使用Golang进行文件复制时,不同方法对MOV视频文件的影响。直接使用io.Copy进行复制能避免错误,而通过bufio方法复制则可能导致MOV文件在Windows10系统下无法正常播放或生成缩略图的问题。
4233

被折叠的 条评论
为什么被折叠?



