github.com/josephvusich/fdf@v0.0.0-20230522095411-9326dd32e33f/copyfile_windows.go (about) 1 package main 2 3 import ( 4 "syscall" 5 "unsafe" 6 7 "golang.org/x/sys/windows" 8 ) 9 10 var ( 11 libKernel32 = windows.NewLazySystemDLL("kernel32.dll") 12 procCopyFileW = libKernel32.NewProc("CopyFileW") 13 ) 14 15 func copyFile(src, dst string) error { 16 wsrc, err := syscall.UTF16PtrFromString(fixLongPath(src)) 17 if err != nil { 18 return err 19 } 20 wdst, err := syscall.UTF16PtrFromString(fixLongPath(dst)) 21 if err != nil { 22 return err 23 } 24 25 result, _, err := syscall.SyscallN(procCopyFileW.Addr(), uintptr(unsafe.Pointer(wsrc)), uintptr(unsafe.Pointer(wdst)), uintptr(1)) 26 if result == 0 { 27 return err 28 } 29 return nil 30 }