//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 }