func copy(dst, src string) error {
data, err := os.ReadFile(src)
if err != nil {
return err
}
stat, err := os.Stat(src)
if err != nil {
return err
}
err = os.WriteFile(dst, data, stat.Mode())
if err != nil {
return err
}
return os.Chmod(dst, stat.Mode())
}
This is fine if the file is small enough to fit in memory.
This preserves the source file's mode and permission bits (overriding umask in Unix).
This preserves the source file's mode and permission bits (overriding umask in Unix).
func copy(dst, src string) error {
f, err := os.Open(src)
if err != nil {
return err
}
defer f.Close()
stat, err := f.Stat()
if err != nil {
return err
}
g, err := os.OpenFile(dst, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, stat.Mode())
if err != nil {
return err
}
defer g.Close()
_, err = io.Copy(g, f)
if err != nil {
return err
}
return os.Chmod(dst, stat.Mode())
}
This can handle large files.
func copy(dst, src string) error {
data, err := os.ReadFile(src)
if err != nil {
return err
}
stat, err := os.Stat(src)
if err != nil {
return err
}
return os.WriteFile(dst, data, stat.Mode())
}
This is fine if the file is small enough to fit in memory.
Warning: in Unix, the destination file's mode and permission bits may be different from the source file's, because umask is applied.
Warning: in Unix, the destination file's mode and permission bits may be different from the source file's, because umask is applied.