新增: 文件操作增强与预览扩展

- 文件剪贴板复制剪切粘贴,重名自动副本
- SFTP下载到本机与外部文件拖入,目录递归
- 传输进度浮动面板,transfer-progress事件链
- Drawio预览,Excel工作线程,冻结看门狗
- cmd与bat自写batch语法高亮,psm1等映射补齐
This commit is contained in:
lxy
2026-09-15 22:26:12 +08:00
parent f1bc5b49f1
commit e7a2c5148e
59 changed files with 3185 additions and 2047 deletions
+5 -35
View File
@@ -4,8 +4,8 @@ import (
"crypto/rand"
"encoding/json"
"fmt"
"io"
"math/big"
"u-desk/internal/common"
"os"
"path/filepath"
"sync"
@@ -288,7 +288,7 @@ func copyRecursively(src, dst string) error {
return copyDirectory(src, dst)
}
return copyFile(src, dst)
return common.CopyFile(src, dst)
}
// copyDirectory 复制目录
@@ -314,7 +314,7 @@ func copyDirectory(src, dst string) error {
return err
}
} else {
if err := copyFile(srcPath, dstPath); err != nil {
if err := common.CopyFile(srcPath, dstPath); err != nil {
return err
}
}
@@ -323,36 +323,6 @@ func copyDirectory(src, dst string) error {
return nil
}
// copyFile 复制文件
func copyFile(src, dst string) error {
// 打开源文件
srcFile, err := os.Open(src)
if err != nil {
return err
}
defer srcFile.Close()
// 创建目标文件
dstFile, err := os.Create(dst)
if err != nil {
return err
}
defer dstFile.Close()
// 复制内容
if _, err := io.Copy(dstFile, srcFile); err != nil {
return err
}
// 复制文件权限
srcInfo, err := os.Stat(src)
if err != nil {
return err
}
return os.Chmod(dst, srcInfo.Mode())
}
// getDevice 获取文件所在设备(盘符)
func getDevice(path string) string {
absPath, err := filepath.Abs(path)
@@ -377,8 +347,8 @@ func generateRandomString(length int) string {
for i := range b {
n, err := rand.Int(rand.Reader, big.NewInt(int64(len(charset))))
if err != nil {
// 如果加密随机数生成失败,回退到时间戳(极低概率)
b[i] = charset[time.Now().UnixNano()%int64(len(charset))]
// crypto/rand 失败时用时间戳+索引偏移避免碰撞
b[i] = charset[(time.Now().UnixNano()+int64(i))%int64(len(charset))]
continue
}
b[i] = charset[n.Int64()]