syscopy windows
This commit is contained in:
parent
79cc4c9585
commit
ab165df43a
@ -1,34 +1,39 @@
|
||||
//go:build windows
|
||||
// +build windows
|
||||
|
||||
package cmd
|
||||
|
||||
import "errors"
|
||||
import (
|
||||
"fmt"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"syscall"
|
||||
"unsafe"
|
||||
)
|
||||
|
||||
func localCopy(src, target string) error {
|
||||
return errors.New("no local copy implementation for windows")
|
||||
}
|
||||
|
||||
/* func localCopy(src, target string) error {
|
||||
// Create target directory if it doesn't exist
|
||||
dirPath := filepath.Dir(target)
|
||||
|
||||
if err := os.MkdirAll(dirPath, 0o755); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
// Open source file
|
||||
sourceFile, err := os.Open(src)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
defer sourceFile.Close()
|
||||
|
||||
// Create target file
|
||||
targetFile, err := os.Create(target)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
defer targetFile.Close()
|
||||
|
||||
sourceHandle := syscall.Handle(sourceFile.Fd())
|
||||
targetHandle := syscall.Handle(targetFile.Fd())
|
||||
|
||||
err = copyFileEx(sourceHandle, targetHandle)
|
||||
// Use CopyFileExW to copy the file
|
||||
err = copyFileEx(src, target)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@ -36,13 +41,24 @@ func localCopy(src, target string) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
func copyFileEx(srcHandle, dstHandle syscall.Handle) error {
|
||||
func copyFileEx(src, dst string) error {
|
||||
fmt.Println("HELELELLEEOEOEOEO")
|
||||
kernel32 := syscall.NewLazyDLL("kernel32.dll")
|
||||
copyFileEx := kernel32.NewProc("CopyFileExW")
|
||||
|
||||
srcPtr, err := syscall.UTF16PtrFromString(src)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
dstPtr, err := syscall.UTF16PtrFromString(dst)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
r1, _, err := copyFileEx.Call(
|
||||
uintptr(srcHandle),
|
||||
uintptr(dstHandle),
|
||||
uintptr(unsafe.Pointer(srcPtr)),
|
||||
uintptr(unsafe.Pointer(dstPtr)),
|
||||
0, 0, 0, 0)
|
||||
|
||||
if r1 == 0 {
|
||||
@ -51,4 +67,3 @@ func copyFileEx(srcHandle, dstHandle syscall.Handle) error {
|
||||
|
||||
return nil
|
||||
}
|
||||
*/
|
||||
|
Loading…
x
Reference in New Issue
Block a user