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