C#开发中一些常用的工具类分享

一、配置文件读写类

用于在开发时候C#操作配置文件读写信息

  • 1、工具类 ReadIni 代码
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading.Tasks;namespace TcpServer
{public class ReadIni{[DllImport("kernel32")]// 读配置文件方法的6个参数:所在的分区(section)、 键值、     初始缺省值、   StringBuilder、  参数长度上限 、配置文件路径public static extern long GetPrivateProfileString(string section, string key, string defaultValue, StringBuilder retVal, int size, string filePath);[DllImport("kernel32")]//写入配置文件方法的4个参数:  所在的分区(section)、  键值、     参数值、       配置文件路径private static extern long WritePrivateProfileString(string section, string key, string value, string filePath);public static string FileNmae = "SysConfig.ini";/*读配置文件*/public static string GetValue(string section, string key){          string fileName = Directory.GetCurrentDirectory() + "/" + ReadIni.FileNmae;if (File.Exists(fileName))  //检查是否有配置文件,并且配置文件内是否有相关数据。{StringBuilder sb = new StringBuilder(255);               GetPrivateProfileString(section, key, "配置文件不存在,读取未成功!", sb, 255, fileName);return sb.ToString();}else{return string.Empty;}}/*写配置文件*/public static void SetValue(string section, string key, string value){            string fileName = Directory.GetCurrentDirectory() + "/" + ReadIni.FileNmae;WritePrivateProfileString(section, key, value, fileName); // 路径会自动创建}}
}
  • 2、使用方法
// 自定义配置文件名称  
ReadIni.FileNmae ="Config.ini"; // 默认SysConfig.ini
// 设置配置文件内容ReadIni.SetValue("配置", "测试","王小宝好");// 读取配置文件内容string value = ReadIni.GetValue("配置","测试");

3、效果
在这里插入图片描述

二、日志记录类

在项目开发中我们经常要对业务进行日志记录,方便出现问题后对于故障的排查。这里我们使用C#实现了简单的日志记录功能。

  • 1、日志记录类代码
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace TcpServer
{public class Logger{private string logPath;private string DirPath;public Logger(string path){DirPath = path;}public Logger(){DirPath = Directory.GetCurrentDirectory()+"/logs/"+DateTime.Now.ToString("yyyyMMdd");            }public void LogInfo(string message){if (!Directory.Exists(DirPath)) { Directory.CreateDirectory(DirPath); }logPath = DirPath + "/log-info.log";Log("INFO", message);}public void LogWarning(string message){if (!Directory.Exists(DirPath)) { Directory.CreateDirectory(DirPath); }logPath = DirPath + "/log-warning.log";Log("WARNING", message);}public void LogError(string message){if (!Directory.Exists(DirPath)) { Directory.CreateDirectory(DirPath); }logPath =DirPath+ "/log-error.log";Log("ERROR", message);}private void Log(string level, string message){string logEntry = $"{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")} - {level} - {message}{Environment.NewLine}";File.AppendAllText(logPath, logEntry);}}
}
  • 2、使用方法
Logger Log = new Logger();
Log.LogInfo("记录一条日志信息");
Log.LogWarning("记录警告日志");
Log.LogError("记录错误日志");
  • 3、记录效果
    在这里插入图片描述

三、数据缓存类

数据缓存类是一个用C#实现的对数据进行缓存的简单功能

  • 1、数据缓存类实现代码
using System;
using System.Collections.Generic;namespace TcpServer
{public class CacheHelper<TKey, TValue>{private readonly Dictionary<TKey, CachedItem> _cache = new Dictionary<TKey, CachedItem>();      public CacheHelper(){}public void Set(TKey key, TValue value,int tTime= 3600){_cache[key] = new CachedItem { ExpTime= TimeSpan.FromSeconds(tTime), Created = DateTime.UtcNow, Value = value };}public bool TryGet(TKey key, out TValue value){CachedItem cachedItem;if (_cache.TryGetValue(key, out cachedItem) && cachedItem.IsValid){value = (TValue)cachedItem.Value;return true;}value = default(TValue);return false;}public bool Remove(TKey key){return _cache.Remove(key);}public void Clear(){_cache.Clear();}// 辅助类,用于跟踪缓存项的创建时间和有效期private class CachedItem{public TimeSpan ExpTime { get; set; }public DateTime Created { get; set; }public object Value { get; set; }public bool IsValid{get{return DateTime.UtcNow - Created < ExpTime;}}}}
}
  • 2、使用方法
 CacheHelper<string, object> cache = new CacheHelper<string, object>(); // 设置缓存  缓存20秒 cache.Set("key1", "value1",20);// 读取缓存object value = string.Empty;if (cache.TryGet("key1", out  value)){      return value;}
  • 3、使用效果需要用心体会

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/295420.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Lua 和 Love 2d 教程 二十一点朴克牌 (上篇lua源码)

GitCode - 开发者的代码家园 Lua版完整原码 规则 庄家和玩家各发两张牌。庄家的第一张牌对玩家是隐藏的。 玩家可以拿牌&#xff08;即拿另一张牌&#xff09;或 停牌&#xff08;即停止拿牌&#xff09;。 如果玩家手牌的总价值超过 21&#xff0c;那么他们就爆掉了。 面牌…

数据结构——红黑树详解

一、红黑树的定义 红黑树&#xff0c;是一种二叉搜索树&#xff0c;但在每个结点上增加一个存储位表示结点的颜色&#xff0c;可以是Red或Black。 通过对任何一条从根到叶子的路径上各个结点着色方式的限制&#xff0c;红黑树确保没有一条路径会比其他路径长出两倍&#xff0c…

数据库加载驱动问题(java.lang.ClassNotFoundException: com.mysql.cj.jdbc.Driver)

java.lang.ClassNotFoundException: com.mysql.cj.jdbc.Driver 遇到此问题&#xff0c;首先检查IDEA外部库中是否有mysql数据库驱动。如下所示&#xff1a; 如果发现外部库中存有mysql数据库驱动&#xff0c;需要在数据库配置文件中查看是否设置有时区mysql8.0以上版本需要设…

【机器学习】机器学习创建算法第3篇:K-近邻算法,学习目标【附代码文档】

机器学习&#xff08;算法篇&#xff09;完整教程&#xff08;附代码资料&#xff09;主要内容讲述&#xff1a;机器学习算法课程定位、目标&#xff0c;K-近邻算法定位,目标,学习目标,1 什么是K-近邻算法,1 Scikit-learn工具介绍,2 K-近邻算法API。K-近邻算法&#xff0c;1.4 …

rhce复习2

HTTPS协议 https简介 超文本传输协议HTTP协议被用于在Web浏览器和网站服务器之间传递信息。HTTP协议以明文方式发送内容&#xff0c;不提供任何方式的数据加密&#xff0c;如果攻击者截取了Web浏览器和网站服务器之间的传输报文&#xff0c;就可以直接读懂其中的信息&#xf…

Canal1.1.5整Springboot在MQ模式和TCP模式监听mysql

canal本实验使用的是1.1.5&#xff0c;自行决定版本&#xff1a;[https://github.com/alibaba/canal/releases] canal 涉及的几个角色 canal-admin&#xff1a;canal 后台管理系统&#xff0c;管理 canal 服务canal-deployer&#xff1a;即canal-server&#xff08;客户端&…

某眼实时票房接口获取

某眼实时票房接口获取 前言解决方案1.找到veri.js2.找到signKey所在位置3.分析它所处的这个函数的内容4.index参数的获取5.signKey参数的获取运行结果关键代码另一种思路票房接口:https://piaofang.maoyan.com/dashboard-ajax https://piaofang.maoyan.com/dashboard 实时票房…

Meta 推出Ego-Exo4D:一个研究视频学习和多模态感知的基础数据集

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

安全架构设计理论与实践相关知识总结

一、安全架构概述 常见信息威胁介绍&#xff1a; 1. 信息泄露&#xff1a;信息被泄露或透露给某个非授权实体 2. 破坏信息完整性&#xff1a;数据被非授权地进行增删改查货破坏而受到损失 3. 拒绝服务&#xff1a;对信息会其他资源的合法访问被无条件的组织 4. 非法使用&#x…

IDE/VS2015和VS2017帮助文档MSDN安装和使用

文章目录 概述VS2015MSDN离线安装离线MSDN的下载离线MSDN安装 MSDN使用方法从VS内F1启动直接启动帮助程序跳转到了Qt的帮助网页 VS2017在线安装MSDN有些函数在本地MSDN没有帮助&#xff1f;切换中英文在线帮助文档 概述 本文主要介绍了VS集成开发环境中&#xff0c;帮助文档MS…

hibernate session接口

hibernate session接口 Session接口是hibernate向应用程序提供的操纵数据库的最主要的接口&#xff0c;提供了保存、更新、删除和加载Java对象的方法。 session具有一个缓存&#xff0c;位于缓存中的对象成为持久化对象&#xff0c;和数据库中的相关记录对应。session能够在某些…

【御控物联】JavaScript JSON结构转换(17):数组To对象——键值互换属性重组

文章目录 一、JSON结构转换是什么&#xff1f;二、核心构件之转换映射三、案例之《JSON数组 To JSON对象》四、代码实现五、在线转换工具六、技术资料 一、JSON结构转换是什么&#xff1f; JSON结构转换指的是将一个JSON对象或JSON数组按照一定规则进行重组、筛选、映射或转换…

MES可视化管理,提高制造业工厂管理水平

在制造业中&#xff0c;生产过程的可视化管理对于提高生产效率、降低成本以及提升决策的准确性和及时性至关重要。MES系统作为制造执行过程中的核心管理工具&#xff0c;为实现生产过程的可视化管理提供了有力支持。 生产车间应用MES生产管理系统之后&#xff0c;能通过电子屏幕…

异地文件如何共享访问?

异地文件共享访问是一种让不同地区的用户能够快速、安全地共享文件的解决方案。人们越来越需要在不同地点之间共享文件和数据。由于复杂的网络环境和安全性的问题&#xff0c;实现异地文件共享一直是一个挑战。 为了解决这个问题&#xff0c;许多公司和组织研发了各种异地文件共…

集成电路企业tapeout,如何保证机台数据准确、完整、高效地采集?

Tapeout即流片&#xff0c;集成电路行业中将CDS最终版电路图提交给半导体制造厂商进行物理生产的过程。在芯片设计与制造的流程中&#xff0c;Tapeout是非常重要的阶段&#xff0c;包括了布局&#xff08;Layout&#xff09;、连线&#xff08;Routing&#xff09;、分析&#…

基于SSM的“汽车销售分析与管理系统”的设计与实现(源码+数据库+文档+PPT)

基于SSM的“汽车销售分析与管理系统”的设计与实现&#xff08;源码数据库文档PPT) 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;SSM 工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 系统展示 系统功能结构图 销售经理系统首页图 客户管理图 车辆…

数据采集工具如何使用呢?那么设置数据采集的方法又是什么呢?

数据采集工具将能够非常有效地解决面临的各种问题。这款工具被设计成一种自动化数据采集工具&#xff0c;特别适用于对日志文件数据的采集。一旦完成设置&#xff0c;该工具将在后台实时进行数据采集&#xff0c;并自动对收集到的数据进行清洗&#xff0c;以确保最终保存到的数…

Redis简介、常用命令

目录 一、关系数据库​​与非关系数据库​​ 1.1. 关系型数据库 1.2 非关系型数据库 1.3.关系数据库与非关系型数据库区别 1.3.1. 数据存储方式不同 1.3.2. 扩展方式不同 1.3.3.对事务性的支持不同 1.4.非关系型数据库产生背景 二、Redis 2.1.Redis简介 2.2.Redis的…

CentOS 7 下离线安装RabbitMQ教程

CentOS 7 下安装RabbitMQ教程一、做准备&#xff08;VMWare 虚拟机上的 CentOS 7 镜像 上安装的&#xff09; &#xff08;1&#xff09;准备RabbitMQ的安装包&#xff08;rabbitmq-server-3.8.5-1.el7.noarch&#xff09;下载地址mq https://github.com/rabbitmq/rabbitmq-se…

【OpenCV-颜色空间】

OpenCV-颜色空间 ■ RGB■ BGR■ HSV■ HSL■ HUE■ YUV ■ RGB ■ BGR BGR 就是RGB R和B调换位置。 OpenCV 默认使用BGR ■ HSV ■ HSL ■ HUE ■ YUV