Files
ollama/cmd/copy_windows.go
2024-07-22 15:51:52 -07:00

54 lines
884 B
Go

package cmd
import (
"os"
"path/filepath"
"syscall"
)
func localCopy(src, target string) error {
dirPath := filepath.Dir(target)
if err := os.MkdirAll(dirPath, 0o755); err != nil {
return err
}
sourceFile, err := os.Open(src)
if err != nil {
return err
}
defer sourceFile.Close()
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)
if err != nil {
return err
}
return nil
}
func copyFileEx(srcHandle, dstHandle syscall.Handle) error {
kernel32 := syscall.NewLazyDLL("kernel32.dll")
copyFileEx := kernel32.NewProc("CopyFileExW")
r1, _, err := copyFileEx.Call(
uintptr(srcHandle),
uintptr(dstHandle),
0, 0, 0, 0)
if r1 == 0 {
return err
}
return nil
}