29 lines
783 B
Go
29 lines
783 B
Go
//go:build !windows
|
|
|
|
package main
|
|
|
|
import (
|
|
"path/filepath"
|
|
"regexp"
|
|
"unicode/utf8"
|
|
)
|
|
|
|
// 文件名按字节的长度上限,留几个字节给后面追加的扩展名
|
|
const maxFilenameBytes = 250
|
|
|
|
// 转换文件名和限制文件名长度,添加保存文件夹的路径
|
|
func transFilename(filename string) string {
|
|
// 转换文件名不允许的特殊字符
|
|
re := regexp.MustCompile(`[<>:"/\\|?*\r\n]`)
|
|
filename = re.ReplaceAllString(filename, "-")
|
|
// linux 和 macOS 下文件名有字节数上限,按字节截断时不能把一个多字节字符切成两半
|
|
if len(filename) > maxFilenameBytes {
|
|
cut := maxFilenameBytes
|
|
for cut > 0 && !utf8.RuneStart(filename[cut]) {
|
|
cut--
|
|
}
|
|
filename = filename[:cut]
|
|
}
|
|
return filepath.Join(recordingDir(), filename)
|
|
}
|