copyFile copies a single file from src to dst using a buffer.
(src, dst string)
| 206 | |
| 207 | // copyFile copies a single file from src to dst using a buffer. |
| 208 | func copyFile(src, dst string) error { |
| 209 | srcFile, err := os.Open(src) |
| 210 | if err != nil { |
| 211 | return err |
| 212 | } |
| 213 | defer srcFile.Close() |
| 214 | |
| 215 | srcInfo, err := srcFile.Stat() |
| 216 | if err != nil { |
| 217 | return err |
| 218 | } |
| 219 | |
| 220 | dstFile, err := os.OpenFile(dst, os.O_CREATE|os.O_WRONLY|os.O_TRUNC, srcInfo.Mode()) |
| 221 | if err != nil { |
| 222 | return err |
| 223 | } |
| 224 | defer dstFile.Close() |
| 225 | |
| 226 | // Use CopyBuffer with a 32KB buffer to minimize syscalls |
| 227 | buf := make([]byte, 32*1024) |
| 228 | if _, err := io.CopyBuffer(dstFile, srcFile, buf); err != nil { |
| 229 | return err |
| 230 | } |
| 231 | |
| 232 | return nil |
| 233 | } |