新增: 文件操作增强与预览扩展
- 文件剪贴板复制剪切粘贴,重名自动副本 - SFTP下载到本机与外部文件拖入,目录递归 - 传输进度浮动面板,transfer-progress事件链 - Drawio预览,Excel工作线程,冻结看门狗 - cmd与bat自写batch语法高亮,psm1等映射补齐
This commit is contained in:
@@ -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()]
|
||||
|
||||
Reference in New Issue
Block a user