Files
acfunlive-remake/filename_windows.go
T
2026-09-25 13:16:54 +08:00

39 lines
1.0 KiB
Go

//go:build windows
package main
import (
"path/filepath"
"regexp"
"unicode/utf8"
)
// windows 下全路径的字符数上限,留几个字符给后面追加的扩展名
const maxPathRunes = 250
// 转换文件名和限制文件名长度,添加保存文件夹的路径
func transFilename(filename string) string {
// 转换文件名不允许的特殊字符
re := regexp.MustCompile(`[<>:"/\\|?*\r\n]`)
filename = re.ReplaceAllString(filename, "-")
dir := recordingDir()
outFilename := filepath.Join(dir, filename)
if utf8.RuneCountInString(outFilename) <= maxPathRunes {
return outFilename
}
// 路径过长时截断文件名而不是直接放弃录制
keep := maxPathRunes - utf8.RuneCountInString(dir) - 2
if keep < 10 {
lPrintErrf("保存文件夹的路径太长,无法生成文件名:%s", dir)
return ""
}
runes := []rune(filename)
if len(runes) > keep {
runes = runes[:keep]
}
outFilename = filepath.Join(dir, string(runes))
lPrintWarnf("文件名过长,已截断为 %s", filepath.Base(outFilename))
return outFilename
}