diff --git a/BarrageGrab/Logger.cs b/BarrageGrab/Logger.cs index 967da2c..756883f 100644 --- a/BarrageGrab/Logger.cs +++ b/BarrageGrab/Logger.cs @@ -85,12 +85,13 @@ namespace BarrageGrab var room = AppRuntime.RoomCaches.GetCachedWebRoomInfo(msg.RoomId.ToString()); if(room == null) return; var date = DateTime.Now.ToString("yyyy年MM月dd日直播"); - dir = Path.Combine(dir, $"({room.WebRoomId}){room?.Owner?.Nickname ?? "-1"}", date); + dir = Path.Combine(dir, $"({room.WebRoomId}){room?.Owner?.Nickname ?? "-1"}", date, "场次" + msg.RoomId.ToString()); if (!Directory.Exists(dir)) { Directory.CreateDirectory(dir); } var path = Path.Combine(dir, type + ".txt"); + path = SafePathString(path); if (!File.Exists(path)) { File.Create(path).Close(); @@ -107,6 +108,31 @@ namespace BarrageGrab } } + /// + /// 将字符串中的特殊字符转换为'?',使其安全用于文件路径 + /// + /// 输入字符串 + /// 处理后的安全字符串 + public static string SafePathString(string input) + { + //在文件系统中,以下字符通常不允许用于文件名:\ / : * ? " < > | + if (string.IsNullOrEmpty(input)) + return input; + + // 文件系统中不允许的字符 + char[] invalidChars = Path.GetInvalidFileNameChars().Concat(Path.GetInvalidPathChars()).Distinct().ToArray(); + + StringBuilder result = new StringBuilder(input.Length); + foreach (char c in input) + { + result.Append(invalidChars.Contains(c) ? '?' : c); + } + + return result.ToString(); + } + + + private static string LogText(Msg msg, PackMsgType barType) { var rinfo = AppRuntime.RoomCaches.GetCachedWebRoomInfo(msg.RoomId.ToString()); diff --git a/BarrageGrab/Properties/AssemblyInfo.cs b/BarrageGrab/Properties/AssemblyInfo.cs index 6d1e8b2..966c8a5 100644 --- a/BarrageGrab/Properties/AssemblyInfo.cs +++ b/BarrageGrab/Properties/AssemblyInfo.cs @@ -33,6 +33,6 @@ using System.Runtime.InteropServices; //可以指定所有这些值,也可以使用“生成号”和“修订号”的默认值 //通过使用 "*",如下所示: // [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("2.7.7")] -[assembly: AssemblyFileVersion("2.7.7")] +[assembly: AssemblyVersion("2.7.8")] +[assembly: AssemblyFileVersion("2.7.8")] [assembly: NeutralResourcesLanguage("zh-CN")]