指定路径创建文件,并写入数据
很多时候,我们需要把重要信息输出到某个文件中,进行查阅。
思路:创建文件夹(有则跳过)==> 创建文件(是否覆盖,是否删除之前的文件,是否保留某一个时间段的文件)==>写入
示例:向当前项目路径添加文件夹,并向里面创建文件(仅保留当天的文件),今天之前的文件连同文件夹一起删除,然后重新创建今天的文件及文件夹
代码:
/// <summary> /// 写入文件 /// </summary> /// <param name="infos"></param> public void WriteToFile(List<OutputInfo> infos) { try { #region var baseDir = AppDomain.CurrentDomain.BaseDirectory; var path = baseDir + @_dicConfig["OutPutPath"].ToString(); //删除不是当天的文件夹和文件 DelDirectory(path); //判断是否有这个文件夹 var filePath = $"{path}/IPURL_{DateTime.Now.ToString("yyyyMMdd")}"; if (!Directory.Exists(filePath)) { Directory.CreateDirectory(filePath); } var pathf = $"{filePath}/{DateTime.Now.ToString("yyyyMMddHHmmss")}.txt"; #endregion FileStream fs = new FileStream(pathf, FileMode.Create, FileAccess.Write); //System.IO.File.SetAttributes(path, FileAttributes.Hidden); StreamWriter sw = new StreamWriter(fs); //开始写入值 sw.WriteLine("程序开始写入IP-URL信息..."); foreach (var item in infos) { sw.WriteLine("Ip:" + item.IP + ",Url:" + item.URL); } sw.WriteLine("程序写入完成"); sw.Close(); fs.Close(); } catch (Exception ex) { Log.Write("error[WriteToFile]:" + ex.Message, SWLog.LogLevel.D错误事件); } } /// <summary> /// 删除文件和文件夹(保留当天) /// </summary> /// <param name="folderPath"></param> public void DelDirectory(string folderPath) { if (System.IO.File.Exists(folderPath)) { DirectoryInfo dyInfo = new DirectoryInfo(folderPath); //获取文件夹下所有的文件夹 foreach (DirectoryInfo feInfo in dyInfo.GetDirectories()) { //判断文件日期是否小于今天,是则删除 if (feInfo.CreationTime < DateTime.Today) feInfo.Delete(true); } //获取文件夹下所有的文件 foreach (FileInfo feInfo in dyInfo.GetFiles()) { feInfo.Delete(); } } }
加载配置文件:
/// <summary> /// 获取配置信息 /// </summary> /// <param name="pluginName">插件名称</param> /// <param name="isTrim">插件名称</param> /// <returns></returns> protected Dictionary<string, string> GetDicConfig(string pluginName, bool isTrim = true) { var retdic = new Dictionary<string, string>(); // config配置文件全路径 var localConfigPath = string.Format("{0}/plugins/{1}/config.txt", AppDomain.CurrentDomain.BaseDirectory, pluginName); if (File.Exists(localConfigPath) != false) { using (System.IO.StreamReader sr = new StreamReader(localConfigPath)) { string tmp = string.Empty; while ((tmp = sr.ReadLine()) != null) { if (tmp.TrimStart().StartsWith("#")) { continue; } string tmp_ary; if (isTrim) { tmp_ary = tmp.Trim().Split('#')[0].Trim(); } else { tmp_ary = tmp.Split('#')[0]; } var ary = tmp_ary.Split('='); if (ary.Length >= 2) { retdic.Add(ary[0].Trim(), tmp_ary.Substring(ary[0].Length + 1, tmp_ary.Length - ary[0].Length - 1)); } } } Log.Write(string.Format("开始加载配置文件:{0}.", localConfigPath), SWLog.LogLevel.G有用信息); } else { Log.Write(string.Format("未发现配置文件:{0}.", localConfigPath), SWLog.LogLevel.G有用信息); } return retdic; }
配置文件路径:
获取的配置文件信息字典:
写入日志如下:
标签:
c#
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
2018-11-28 生成随机字符串
2018-11-28 SQL语句计算距离今天生日还差几天
2018-11-28 sqlServer 获取最新的一条数据
2018-11-28 c#所有部门及其下所部门生成树形图(递归算法获取或键值对方式获取)
2018-11-28 根据中文名,自动生成首字母的拼音码或拼音码(两种方法)