自己做的网站如何加视频教程,邯郸网站建设怎么开发,网站维护要什么,郑州管家网站托管导出数据文件功能#xff0c;上线一段时间#xff0c;发现无法导出文件#xff0c;调试发现文件名称含有产品名称#xff0c;但是产品名称有非法字符#xff0c;导致导出文件失败。直接开发个工具类过滤下即可。直接上代码#xff1a;1. 高性能文件名非法字符清理工具Fil…导出数据文件功能上线一段时间发现无法导出文件调试发现文件名称含有产品名称但是产品名称有非法字符导致导出文件失败。直接开发个工具类过滤下即可。直接上代码1. 高性能文件名非法字符清理工具FileNameSanitizer/// summary /// 高性能文件名非法字符清理工具 /// 支持Windows/Linux/Mac平台的非法字符检测和清理 /// /summary public static class FileNameSanitizer { // Windows系统非法字符 (不包括路径分隔符因为这里只处理文件名) private static readonly char[] WindowsInvalidChars new char[] { , , , |, *, ?, :, \\, / }; // 预编译正则表达式用于高性能匹配 private static readonly Regex InvalidCharRegex new Regex( [|*?:\\/], RegexOptions.Compiled | RegexOptions.CultureInvariant ); /// summary /// 清理文件名中的非法字符 /// /summary /// param namefileName原始文件名/param /// returns清理后的文件名/returns public static string SanitizeFileName(string fileName) { if (string.IsNullOrEmpty(fileName)) return fileName; // 使用StringBuilder提高性能 var sb new StringBuilder(fileName.Length); foreach (char c in fileName) { // 检查是否为非法字符 if (Array.IndexOf(WindowsInvalidChars, c) -1) { sb.Append(c); } // 跳过非法字符不添加到结果中 } string sanitized sb.ToString(); // 确保文件名不为空如果所有字符都被移除 if (string.IsNullOrEmpty(sanitized)) sanitized _; // 移除首尾空白字符 sanitized sanitized.Trim(); // 确保文件名不以 . 结尾这在某些系统上可能导致问题 if (sanitized.EndsWith(.)) sanitized sanitized.TrimEnd(.); return sanitized; } /// summary /// 使用正则表达式的快速清理方法 /// /summary /// param namefileName原始文件名/param /// returns清理后的文件名/returns public static string SanitizeFileNameRegex(string fileName) { if (string.IsNullOrEmpty(fileName)) return fileName; // 使用预编译的正则表达式替换非法字符 string sanitized InvalidCharRegex.Replace(fileName, ); // 确保文件名不为空 if (string.IsNullOrEmpty(sanitized)) sanitized _; // 移除首尾空白字符 sanitized sanitized.Trim(); // 确保文件名不以 . 结尾 if (sanitized.EndsWith(.)) sanitized sanitized.TrimEnd(.); return sanitized; } /// summary /// 检查文件名是否包含非法字符 /// /summary /// param namefileName待检查的文件名/param /// returns是否包含非法字符/returns public static bool ContainsInvalidChars(string fileName) { if (string.IsNullOrEmpty(fileName)) return false; foreach (char c in fileName) { if (Array.IndexOf(WindowsInvalidChars, c) ! -1) return true; } return false; } }2.数据导出工具类DataExporter/// summary /// 数据导出工具类 /// 提供高性能的数据导出和文件名清理功能 /// /summary public class DataExporter { /// summary /// 导出数据到文件并自动清理文件名中的非法字符 /// /summary /// param namedata要导出的数据/param /// param namefileName原始文件名/param /// param namedirectory目标目录/param /// returns实际保存的完整路径/returns public static string ExportData(byte[] data, string fileName, string directory ) { // 清理文件名 string cleanFileName FileNameSanitizer.SanitizeFileName(fileName); // 构建完整路径 string fullPath Path.Combine(directory, cleanFileName); // 确保目录存在 string dirPath Path.GetDirectoryName(fullPath); if (!string.IsNullOrEmpty(dirPath) !Directory.Exists(dirPath)) { Directory.CreateDirectory(dirPath); } // 写入文件 File.WriteAllBytes(fullPath, data); return fullPath; } /// summary /// 导出文本数据到文件 /// /summary /// param nametext要导出的文本/param /// param namefileName原始文件名/param /// param nameencoding文本编码/param /// param namedirectory目标目录/param /// returns实际保存的完整路径/returns public static string ExportText(string text, string fileName, Encoding encoding null, string directory ) { if (encoding null) encoding Encoding.UTF8; // 清理文件名 string cleanFileName FileNameSanitizer.SanitizeFileName(fileName); // 构建完整路径 string fullPath Path.Combine(directory, cleanFileName); // 确保目录存在 string dirPath Path.GetDirectoryName(fullPath); if (!string.IsNullOrEmpty(dirPath) !Directory.Exists(dirPath)) { Directory.CreateDirectory(dirPath); } // 写入文件 File.WriteAllText(fullPath, text, encoding); return fullPath; } }3.测试static void Main() { // 测试文件名清理 string[] testFileNames { test\file.txt, datainfo.csv, report|summary.pdf, my?document.docx, file*name.exe, normal_file.txt, :\\\\|?* illegal chars, spaced file , .hidden., }; Console.WriteLine(文件名清理测试:); foreach (string originalName in testFileNames) { string cleaned FileNameSanitizer.SanitizeFileName(originalName); bool hasInvalid FileNameSanitizer.ContainsInvalidChars(originalName); Console.WriteLine($原文件名: {originalName} - 清理后: {cleaned} (含非法字符: {hasInvalid})); } Console.WriteLine(\n性能对比测试:); // 性能测试 string testFileName performance_test_:\\|?*.txt; int iterations 100000; // 测试逐字符清理方法 var sw System.Diagnostics.Stopwatch.StartNew(); for (int i 0; i iterations; i) { FileNameSanitizer.SanitizeFileName(testFileName); } sw.Stop(); Console.WriteLine($逐字符清理方法 ({iterations} 次): {sw.ElapsedMilliseconds} ms); // 测试正则表达式清理方法 sw.Restart(); for (int i 0; i iterations; i) { FileNameSanitizer.SanitizeFileNameRegex(testFileName); } sw.Stop(); Console.WriteLine($正则表达式清理方法 ({iterations} 次): {sw.ElapsedMilliseconds} ms); // 实际导出示例 Console.WriteLine(\n导出示例:); try { string exportedPath DataExporter.ExportText( 这是测试数据, exportdata.csv, Encoding.UTF8, output ); Console.WriteLine($成功导出到: {exportedPath}); } catch (Exception ex) { Console.WriteLine($导出失败: {ex.Message}); } }