# Other-XiaoFeng
**Repository Path**: tangtangplus/XiaoFeng
## Basic Information
- **Project Name**: Other-XiaoFeng
- **Description**: 基础类库、数据库中间件、网络通讯中间件、Redis、Socket、HttpHelper、QueryableX、Cache、FTP、JSON、XML、IO、配置、各种加密码算法、作业调度、正则、通用数据库操作,支持10多种数据库
- **Primary Language**: C#
- **License**: MIT
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 5
- **Created**: 2024-12-31
- **Last Updated**: 2024-12-31
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# XiaoFeng






Nuget:XiaoFeng
| QQ群号 | QQ群 | 公众号 |
| :----:| :----: | :----: |
| 748408911 |  |  |
源码: https://github.com/zhuovi
教程: https://www.eelf.cn
C#公用类库,包含了Redis,Memcached,Json,Xml,ADO.NET数据库操作兼容以下数据库(SQLSERVER,MYSQL,ORACLE,达梦,SQLITE,ACCESS,OLEDB,ODBC等数十种数据库),正则表达式,QueryableX(ORM)和EF无缝对接,FTP,网络日志,调度器(作业),网络库(SocketServer,WebSocketServer,SocketClient,WebSocketClient),IO操作,加密算法(AES,DES,DES3,MD5,RSA,RC4,SHA等常用加密算法),超级好用的配置管理器,应用池,类型转换等功能。
## 感谢支持
| 名称 | LOGO |
| :----:| :----: |
| JetBrains | [](https://jb.gg/OpenSourceSupport) |
| Visual Studio | [](https://visualstudio.microsoft.com/) |
## XiaoFeng
XiaoFeng generator with [XiaoFeng](https://github.com/zhuovi/XiaoFeng).
## Install
.NET CLI
```
$ dotnet add package XiaoFeng --version 5.2.1
```
Package Manager
```
PM> Install-Package XiaoFeng -Version 5.2.1
```
PackageReference
```
```
Paket CLI
```
> paket add XiaoFeng --version 5.2.1
```
Script & Interactive
```
> #r "nuget: XiaoFeng, 5.2.1"
```
Cake
```
// Install XiaoFeng as a Cake Addin
#addin nuget:?package=XiaoFeng&version=5.2.1
// Install XiaoFeng as a Cake Tool
#tool nuget:?package=XiaoFeng&version=5.2.1
```
# XiaoFeng 类库包含库
| 命名空间 | 所属类库 | 开源状态 | 说明 | 包含功能 |
| :----| :---- | :---- | :----: | :---- |
| XiaoFeng.Prototype | XiaoFeng.Core | :white_check_mark: | 扩展库 | ToCase 类型转换
ToTimestamp,ToTimestamps 时间转时间戳
GetBasePath 获取文件绝对路径,支持Linux,Windows
GetFileName 获取文件名称
GetMatch,GetMatches,GetMatchs,IsMatch,ReplacePatten,RemovePattern 正则表达式操作
|
| XiaoFeng.Net | XiaoFeng.Net | :white_check_mark: | 网络库 | XiaoFeng网络库,封装了Socket客户端,服务端(Socket,WebSocket),根据当前库可轻松实现订阅,发布等功能。|
| XiaoFeng.Http | XiaoFeng.Core | :white_check_mark: | 模拟请求库 | 模拟网络请求 |
| XiaoFeng.Data | XiaoFeng.Core | :white_check_mark: | 数据库操作库 | 支持SQLSERVER,MYSQL,ORACLE,达梦,SQLITE,ACCESS,OLEDB,ODBC等数十种数据库 |
| XiaoFeng.Cache | XiaoFeng.Core | :white_check_mark: | 缓存库 | 内存缓存,Redis,MemcachedCache,MemoryCache,FileCache缓存 |
| XiaoFeng.Config | XiaoFeng.Core | :white_check_mark: | 配置文件库 | 通过创建模型自动生成配置文件,可为xml,json,ini文件格式 |
| XiaoFeng.Cryptography | XiaoFeng.Core | :white_check_mark: | 加密算法库 | AES,DES,RSA,MD5,DES3,SHA,HMAC,RC4加密算法 |
| XiaoFeng.Excel | XiaoFeng.Excel | :white_check_mark: | Excel操作库 | Excel操作,创建excel,编辑excel,读取excel内容,边框,字体,样式等功能 |
| XiaoFeng.Ftp | XiaoFeng.Ftp | :white_check_mark: | FTP请求库 | FTP客户端 |
| XiaoFeng.IO | XiaoFeng.Core | :white_check_mark: | 文件操作库 | 文件读写操作 |
| XiaoFeng.Json | XiaoFeng.Core | :white_check_mark: | Json序列化,反序列化库 | Json序列化,反序列化库 |
| XiaoFeng.Xml | XiaoFeng.Core | :white_check_mark: | Xml序列化,反序列化库 | Xml序列化,反序列化库 |
| XiaoFeng.Log | XiaoFeng.Core | :white_check_mark: | 日志库 | 写日志文件,数据库 |
| XiaoFeng.Memcached | XiaoFeng.Memcached | :white_check_mark: | Memcached缓存库 | Memcached中间件,支持.NET框架、.NET内核和.NET标准库,一种非常方便操作的客户端工具。实现了Set,Add,Replace,PrePend,Append,Cas,Get,Gets,Gat,Gats,Delete,Touch,Stats,Stats Items,Stats Slabs,Stats Sizes,Flush_All,Increment,Decrement,线程池功能。|
| XiaoFeng.Redis | XiaoFeng.Redis | :white_check_mark: | Redis缓存库 | Redis中间件,支持.NET框架、.NET内核和.NET标准库,一种非常方便操作的客户端工具。实现了Hash,Key,String,ZSet,Stream,Log,List,订阅发布,线程池功能; |
| XiaoFeng.Threading | XiaoFeng.Core | :white_check_mark: | 线程库 | 线程任务,线程队列 |
| XiaoFeng.Mvc | XiaoFeng.Mvc | :x: | 低代码WEB开发框架 | .net core 基础类,快速开发CMS框架,真正的低代码平台,自带角色权限,WebAPI平台,后台管理,可托管到服务运行命令为:应用.exe install 服务名 服务说明,命令还有 delete 删除 start 启动 stop 停止。 |
| XiaoFeng.Proxy | XiaoFeng.Proxy | :white_check_mark: | 代理库 | 开发中 |
| XiaoFeng.TDengine | XiaoFeng.TDengine | :white_check_mark: | TDengine 客户端 | 开发中 |
| XiaoFeng.GB28181 | XiaoFeng.GB28181 | :white_check_mark: | 视频监控库,SIP类库,GB28181协议 | 开发中 |
| XiaoFeng.Onvif | XiaoFeng.Onvif | :white_check_mark: | 视频监控库Onvif协议 | XiaoFeng.Onvif 基于.NET平台使用C#封装Onvif常用接口、设备、媒体、云台等功能, 拒绝WCF服务引用动态代理生成wsdl类文件 , 使用原生XML扩展标记语言封装参数,所有的数据流向都可控。 |
| FayElf.Plugins.WeChat | FayElf.Plugins.WeChat | :white_check_mark: | 微信公众号,小程序类库 | 微信公众号,小程序类库。 |
| XiaoFeng.Mqtt | XiaoFeng.Mqtt | :white_check_mark: | MQTT协议 | XiaoFeng.Mqtt中间件,支持.NET框架、.NET内核和.NET标准库,一种非常方便操作的客户端工具。实现了MQTT客户端,MQTT服务端,同时支持TCP,WebSocket连接。支持协议版本3.0.0,3.1.0,5.0.0。 |
| XiaoFeng.Modbus | XiaoFeng.Modbus | :white_check_mark: | MODBUS协议 | MODBUS协议,支持RTU、ASCII、TCP三种方式进行通信,自动离线保存服务端数据 |
| XiaoFeng.DouYin | XiaoFeng.DouYin | :white_check_mark: | 抖音开放平台SDK | 抖音开放平台接口 |
| XiaoFeng.KuaiShou | XiaoFeng.KuaiShou | :white_check_mark: | 快手开放平台SDK | 快手开放平台接口 |
| XiaoFeng.Mvc.AdminWinDesk | XiaoFeng.Mvc.AdminWinDesk | :white_check_mark: | XiaoFeng.Mvc后台皮肤 | 模仿windows桌面后台皮肤 |
| FayElf.Cube.Blog | FayElf.Cube.Blog | :white_check_mark: | XiaoFeng.Mvc开发的技术博客 | 使用低代码开发框架(XiaoFeng.Mvc)+Windows后台皮肤(XiaoFeng.Mvc.AdminWinDesk),开发的一个博客平台。 |
| XiaoFeng.Ofd | XiaoFeng.Ofd | :white_check_mark: | OFD读写库 | OFD 读写处理库,支持文档的生成、文档编辑、文档批注、数字签名、文档合并、文档拆分、文档转换至PDF、文档查询等功能。 |
| XiaoFeng.Templates | XiaoFeng.Templates | :white_check_mark: | 项目模板 | XiaoFeng.Mvc 低代码开发框架,用于创建 ASP.NET Core 应用程序的项目模板。此模板还可以用于 REST API 此模板还可以用于 REST API、Socket 项目模板、Mqtt 项目模板。|
# XiaoFeng 扩展方法
## 万能的类型转换扩展方法 ToCast()
当前方法可转换任何值类型包括 对象类型,数组类型。
在转换方法前,首选会验证当前值,类型和要转换的类型是否相同,接着就是验证,它是否符合目标类型的格式,如果不符合会转换成目标类型的默认值,也可以设置默认值。
数据类型相互转换如:字符串转整型,字符串转日期,字符串转UUID
### 用法示例:
```csharp
using XiaoFeng;
int a = "10".ToCast();
Int64 b = "10".ToCast();
double c = "10".ToCast();
DateTime d = "2022-01-19".ToCast();
float e = "".ToCast(1.0);
int f = (int)"".GetValue(typeof(int));
Guid g = "58AFBEB5791311ECBF49FA163E542B11".ToCast();
Guid h = "58AFBEB5-7913-11EC-BF49-FA163E542B11".ToCast();
```
还有一系列专一处理字符串转相关类型的方法,如:
```csharp
Int16 a = "1".ToInt16();
int b = "2".ToInt32();
Int64 c = "3".ToInt64();
UInt16 d = "4".ToUInt16();
UInt32 e = "5".ToUInt32();
UInt64 f ="6".ToUInt64();
float e = "7.2".ToFloat();
DateTime g = "2022-01-19 12:32".ToDateTime();
double h = "6.3".ToDouble();
byte i = "2".ToByte();
Boolean j = "1".ToBoolean();
Boolean k = "true".ToBoolean();
Boolean l = "False".ToBoolean();
Decimal m = "3.658".ToDecimal();
long n = "2584512".ToLong();
Guid o = "58AFBEB5791311ECBF49FA163E542B11".ToGuid();
Guid p = "58AFBEB5-7913-11EC-BF49-FA163E542B11".ToGuid();
```
## 获取对象基础类型 GetValueType
### 用法实例
```csharp
var a = "a".GetValueType();
var b = 10.GetValueType();
var c = new{a="a",b="b"}.GetValueType();
var d = new Dictionary().GetValueType();
```
返回的是一个枚举类型 ValueTypes
```csharp
///
/// 值类型枚举
///
public enum ValueTypes
{
///
/// 空
///
[Description("空")]
Null = 0,
///
/// 值
///
[Description("值")]
Value = 1,
///
/// 类
///
[Description("类")]
Class = 2,
///
/// 结构体
///
[Description("结构体")]
Struct = 3,
///
/// 枚举
///
[Description("枚举")]
Enum = 4,
///
/// 字符串
///
[Description("字符串")]
String = 5,
///
/// 数组
///
[Description("数组")]
Array = 6,
///
/// List
///
[Description("List")]
List = 7,
///
/// 字典
///
[Description("字典")]
Dictionary = 8,
///
/// ArrayList
///
[Description("ArrayList")]
ArrayList = 9,
///
/// 是否是集合类型
///
[Description("是否是集合类型")]
IEnumerable = 10,
///
/// 字典类型
///
[Description("字典类型")]
IDictionary = 11,
///
/// 匿名类型
///
[Description("匿名类型")]
Anonymous = 12,
///
/// DataTable
///
[Description("DataTable")]
DataTable = 13,
///
/// 其它
///
[Description("其它")]
Other = 20
}
```
# 字符串匹配提取
### 用法实例
IsMatch 当前扩展方法 主要是 当前字符串是否匹配上正则表达式,比如,匹配当前字符串是否是QQ号码,代码如下:
```csharp
if("7092734".IsMatch(@"^\d{5-11}$"))
Console.WriteLine("是QQ号码格式.");
else
Console.WriteLine("非QQ号码格式.");
```
输出结果为:是QQ号码格式。
因为 字符串 "7092734"确实是QQ号码。
IsNotMatch 当前方法其实就是 !IsMatch,用法和IsMatch用法一样。
Match 当前扩展方法返回的是Match,使用指定的匹配选项在输入字符串中搜索指定的正则表达式的第一个匹配项。
Matches 当前扩展方法返回的是使用指定的匹配选项在指定的输入字符串中搜索指定的正则表达式的所有匹配项。
这三个方法是最原始最底层的方法,其它扩展都基于当前三个方法中的一个或两个来实现的。
GetMatch 扩展方法返回结果是:提取符合模式的数据所匹配的第一个匹配项所匹配的第一项或a组的数据
GetPatterns 扩展方法返回结果是:提取符合模式的数据所有匹配的第一项数据或a组数据
GetMatchs 扩展方法返回结果是:提取符合模式的数据所匹配的第一项中所有组数据
GetMatches 扩展方法返回结果是:提取符合模式的数据所有匹配项或所有组数据
提取的数据量对比:GetMatch < GetMatchs < GetPatterns < GetMatches
ReplacePattern 扩展方法用途是 使用 正则达式 来替换数据
下边通过实例来讲解这几个方法的使用及返回结果的区别:
```csharp
var a = "abc4d5e6hh5654".GetMatch(@"\d+");
a的值为:"4";
var b = "abc4d5e6hh5654".GetPatterns(@"\d+");
b的值为:["4","5","6","5654"];
var c = "abc4d5e6hh5654".GetMatchs(@"(?[a-z]+)(?\d+)");
c的值为:{{"a","abc"},{"b","4"}};
var d = "abc4d5e6hh5654".GetMatches(@"(?[a-z]+)(?\d+)");
d的值为:[{{"a","abc"},{"b","4"}},{{"a","d"},{"b","5"}},{{"a","e"},{"b","6"}},{{"a","hh"},{"b","5654"}}]
var g = "a6b9c53".ReplacePattern(@"\d+","g");
g的值为:"agbgcg";
var h = "a6b7c56".RemovePattern(@"\d+");
h的值为:"abc";
var i = "a1b2c3".ReplacePattern(@"\d+",m=>{
var a = a.Groups["a"].Value;
if(a == "1")return "a1";
else return "a2";
});
i的值为:"aa1ba2ca2";
```
## 数字转换成大写数字 ToChineseNumber和ToNumber
### 用法实例
``` csharp
var a = "123456789.1234";
//转换成大写
var b = a.ToChineseNumber();
//输出结果为 壹亿贰仟叁佰肆拾伍万陆仟柒佰捌拾玖点壹贰叁肆
//转换成大写人民币
var c = a.ToChineseNumber(UpperType.Money);
//输出结果为 壹亿贰仟叁佰肆拾伍万陆仟柒佰捌拾玖圆壹分贰厘叁毫肆微
//大写转换成数字
var d = c.ToNumber();
//输出结果为 123456789.1234
//大写转换成数字并增加,格式
var e = c.ToNumber(true);
//输出结果为 123,456,789.1234
//数字转换成带,格式的数字
var f = "123456789.1235684".ToNumber(true);
//输出结果为 123,456,789.1235684
```
# 异步锁 AsyncLock
异步多线程操作同一个对象时使用的锁
```csharp
readonly AsyncLock LockObj = new AsyncLock();
using(await LockObj.EnterAsync()){
//操作数据
}
```
# 参数集合 ParameterCollection
当前类实现了网址参数的解析转换功能
```csharp
//实例化
var p = new ParameterCollection();
//添加参数
p.Add("a", "aa");
p.Set("a", "bb");
p.SetRange(new Dictionary
{
{"a","aa" },
{"b","bb" }
});
p.AddRange(new Dictionary
{
{"c","cc" },
{"d","dd" }
});
//移除参数
p.Remove("b");
//是否包含参数
p.Contains("c");
//排序
var p1 = p.OrderBy(x => x.Key);
//转换成url
var str1 = p.ToString();
//转换成url并编码
var str2 = p.ToString(true);
```
# 雪花ID
```csharp
//生成一个雪花ID
var id = XiaoFeng.SnowFlake.Instance.GetID();
```
# 日志操作类 XiaoFeng.LogHelper
写日志文件
```csharp
//默认日志文件放在项目根目录下的Log文件夹下
LogHelper.WriteLog("日志信息");
LogHelper.Info("日志消息");
LogHelper.Error(new Exception("错误信息"));
//下边可定义文件日志地址
var log = new Logger();
log.LogPath = "E://Work/Log.txt";
log.Write(new LogData
{
Message="日志信息
});
log.Error(new Exception("错误信息"));
```
# 随机数
```csharp
//随机生成4位长度的字符包括数字和字母
RandomHelper.GetRandomString(4, RandomType.Number | RandomType.Letter);
//随机生成5组长度为4的字符包括数字和字母并且不重复
RandomHelper.GetRandomStrings(5, 4, RandomType.Number | RandomType.Letter, true);
//随机生成100至1000以内的整数
RandomHelper.GetRandomInt(100, 1000);
//随机生成6们长度的字节组
RandomHelper.GetRandomBytes(6);
```
# 配置管理器 XiaoFeng.Config.ConfigSet<>
通过继承当前类可以轻松实现配置文件的操作,缓存,增,删,改,查等功能,还可实现配置文件的加密解密 。
## 用法实例
XiaoFeng类库自动创建一个XiaoFeng.json配置文件 它的类库源码如下
```csharp
///
/// XiaoFeng总配置
///
[ConfigFile("Config/XiaoFeng.json", 0, "FAYELF-CONFIG-XIAOFENG", ConfigFormat.Json)]
public class Setting : ConfigSet, ISetting
{
#region 构造器
///
/// 无参构造器
///
public Setting() : base() { }
///
/// 设置配置文件名
///
/// 文件路径
public Setting(string fileName) : base(fileName) { }
#endregion
#region 属性
///
/// 是否启用调试
///
[Description("是否启用调试")]
public bool Debug { get; set; } = true;
///
/// 最大线程数量
///
[Description("最大线程数量")]
public int MaxWorkerThreads { get; set; } = 100;
///
/// 消费日志空闲时长
///
[Description("消费日志空闲时长")]
public int IdleSeconds { get; set; } = 60;
///
/// 任务队列执行任务超时时间
///
private int _TaskWaitTimeout = 5 * 60;
///
/// 任务队列执行任务超时时间
///
[Description("任务队列执行任务超时时间")]
public int TaskWaitTimeout {
get
{
if (this._TaskWaitTimeout == 0)
this._TaskWaitTimeout = 10 * 1000;
return this._TaskWaitTimeout ;
}
set
{
this._TaskWaitTimeout = value;
}
}
///
/// 是否启用数据加密
///
[Description("是否启用数据加密")]
public bool DataEncrypt { get; set; } = false;
///
/// 加密数据key
///
[Description("加密数据key")]
public string DataKey { get; set; } = "7092734";
///
/// 是否开启请求日志
///
[Description("是否开启请求日志")]
public bool ServerLogging { get; set; }
///
/// 是否拦截
///
[Description("是否拦截")]
public bool IsIntercept { get; set; }
///
/// SQL注入串
///
[Description("SQL注入串")]
public string SQLInjection { get; set; } = @"insert\s+into |update |delete |select | union | join |exec |execute | exists|'|truncate |create |drop |alter |column |table |dbo\.|sys\.|alert\(||