恒美微站
首页
关于我们
建站服务
主题模板
案例展示
资讯中心
联系我们
C# 代码片段(一):文件、字符串、时间与序列化常用写法
首页
资讯中心
/
C# 代码片段(一):文件、字符串、时间与序列化常用写法
C# 代码片段(一):文件、字符串、时间与序列化常用写法
发布时间:2026/10/15 14:06:13
代码片段库第一篇。整理 C#/.NET 日常开发中最常用、可直接复制的片段文件操作、字符串与时间处理、加密与序列化。每一段都附带使用示例后续会持续更新。1. 安全读取文件带编码与异常处理// 读取文件避免 FileNotFoundException 直接崩 string path C:\data\config.json; if (File.Exists(path)) { string json File.ReadAllText(path, Encoding.UTF8); Console.WriteLine(json); } else { Console.WriteLine(文件不存在); }相关阅读C# 代码片段二WPF 桌面开发高频写法。2. 复制整个目录递归public static void CopyDirectory(string sourceDir, string destDir) { Directory.CreateDirectory(destDir); foreach (string file in Directory.GetFiles(sourceDir)) { File.Copy(file, Path.Combine(destDir, Path.GetFileName(file)), overwrite: true); } foreach (string dir in Directory.GetDirectories(sourceDir)) { CopyDirectory(dir, Path.Combine(destDir, Path.GetFileName(dir))); } }3. 文件大小格式化public static string FormatSize(long bytes) { string[] units { B, KB, MB, GB, TB }; double size bytes; int unit 0; while (size 1024 unit units.Length - 1) { size / 1024; unit; } return ${size:0.##} {units[unit]}; } // 用法FormatSize(1536) → 1.5 KB4. 时间戳转换Unix 秒 ↔ DateTime// Unix 秒 → DateTime本地时区 DateTime FromUnix(long unixSeconds) DateTimeOffset.FromUnixTimeSeconds(unixSeconds).ToLocalTime().DateTime; // DateTime → Unix 秒 long ToUnix(DateTime dt) new DateTimeOffset(dt).ToUnixTimeSeconds();5. 时间范围判断是否在指定时间段内// 判断当前时间是否在 08:30 ~ 18:00 之间 bool IsInWorkingHours(DateTime now, TimeSpan start, TimeSpan end) { var t now.TimeOfDay; return t start t end; }6. JSON 序列化 / 反序列化System.Text.Jsonusing System.Text.Json; var options new JsonSerializerOptions { PropertyNamingPolicy JsonNamingPolicy.CamelCase, // 驼峰命名 WriteIndented true }; // 序列化 string json JsonSerializer.Serialize(obj, options); // 反序列化 var obj JsonSerializer.DeserializeMyClass(json, options); // 解析未知结构动态 using var doc JsonDocument.Parse(json); string name doc.RootElement.GetProperty(name).GetString() ?? ;7. MD5 / SHA256 哈希using System.Security.Cryptography; public static string Md5(string input) Convert.ToHexString(MD5.HashData(Encoding.UTF8.GetBytes(input))).ToLower(); public static string Sha256(string input) Convert.ToHexString(SHA256.HashData(Encoding.UTF8.GetBytes(input))).ToLower(); // .NET 8 推荐用 HashData避免每次创建对象8. 字符串判空与默认值string name input.Trim(); if (string.IsNullOrWhiteSpace(name)) name 默认值; // 或一行 string name2 string.IsNullOrWhiteSpace(input) ? 默认值 : input.Trim();9. 路径处理安全拼接// 别用字符串拼接路径用 Path.Combine string fullPath Path.Combine(baseDir, uploads, fileName); // 获取扩展名 / 文件名 string ext Path.GetExtension(fileName); // .json string name Path.GetFileNameWithoutExtension(fileName); // config // 防止路径穿越攻击 string safe Path.GetFullPath(Path.Combine(baseDir, fileName)); if (!safe.StartsWith(Path.GetFullPath(baseDir))) throw new UnauthorizedAccessException(非法路径);10. 批量执行 重试简单版public static T RetryT(FuncT action, int times 3, int delayMs 500) { for (int i 0; i times; i) { try { return action(); } catch (Exception) when (i times - 1) { Thread.Sleep(delayMs * (i 1)); // 递增等待 } } return action(); // 最后一次不再吞异常 }以上片段基于 .NET 8可直接粘贴使用。下一篇计划整理 WPF / WinForms 桌面端常用片段绑定、转换器、扫码枪有想看的主题欢迎评论区留言。相关阅读C# 代码片段三WinForms 桌面开发常用写法。