XFEExtension
【DLL】XFE各类拓展是一个C#的DLL库,旨在优化C#代码中常用语句的使用,并提供更简洁的访问方式,同时提供Xunit测试框架,快速搭建服务器/客户端,免费ChatGPTAPI接口,免费通讯服务器,XFE下载器,新增格式等
关注
0
Fork
0
Star
0
返回提交历史
Modified
XFEExtension.NetCore.Test/Program.cs
+3
-56
Modified
XFEExtension.NetCore/BufferExtension/BufferExtension.cs
+2
-1
Added
XFEExtension.NetCore/FileExtension/XFEPackage/XFEPackage.cs
+104
-0
Added
XFEExtension.NetCore/FileExtension/XFEPackage/XFEPackageBase.cs
+12
-0
Added
XFEExtension.NetCore/FileExtension/XFEPackage/XFEPackagedDirectory.cs
+45
-0
Added
XFEExtension.NetCore/FileExtension/XFEPackage/XFEPackagedFile.cs
+12
-0
Modified
XFEExtension.NetCore/XFEExtension.NetCore.csproj
+10
-3
XFEstudio/XFEExtension
重构文件打包功能并更新版本号
- 修复 `BufferExtension.cs` 中的数组越界问题。 - 更新 `XFEExtension.NetCore.csproj` 的版本号至 `3.3.0`。 - 新增 `XFEPackage` 类,提供文件打包和解包的逻辑。 - 新增抽象基类 `XFEPackageBase`,定义文件和目录的基本属性。 - 新增 `XFEPackagedDirectory` 类,表示打包目录及其文件和子目录。 - 新增 `XFEPackagedFile` 类,表示打包文件及其数据。
c93695b
代码差异
7 个文件
+188
-60
@@ -1,63 +1,10 @@
1
using XFEExtension.NetCore.XFEChatGPT;
2
using XFEExtension.NetCore.XFETransform;
1
using XFEExtension.NetCore.FileExtension.XFEPackage;
3
2
4
3
internal class Program
5
4
{
6
public static MemorableXFEChatGPT XFEChatGPT { get; set; } = new MemorableXFEChatGPT();
7
public static string CurrentDialogID { get; set; } = Guid.NewGuid().ToString();
8
5
private static void Main(string[] args)
9
6
{
10
//using var client = new HttpClient();
11
//client.DefaultRequestHeaders.Add("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/129.0.0.0 Safari/537.36 Edg/129.0.0.0");
12
//client.DefaultRequestHeaders.Add("Origin", "https://www.piyao.org.cn");
13
//client.DefaultRequestHeaders.Add("Referer", "https://www.piyao.org.cn/");
14
//QueryableJsonNode jsonNode = @"C:\Users\XFEstudio\Desktop\新建 文本文档.txt".ReadOut()!;
15
var originalText = """
16
测啊是
17
测\\n测啊
18
啊啊\n你是
19
""";
20
Console.WriteLine(originalText);
21
var enterConverter = new EscapeConverter("\n", "\\n", "n", "\\");
22
var rConverter = new EscapeConverter("\r", "\\r", "r", "\\");
23
var convertedText = enterConverter.Convert(originalText);
24
convertedText = rConverter.Convert(convertedText);
25
Console.WriteLine(convertedText);
26
var enterInvertText = enterConverter.Inverse(convertedText);
27
enterInvertText = rConverter.Inverse(enterInvertText);
28
Console.WriteLine(enterInvertText);
7
XFEPackage.PackFile(@"C:\Users\XFEstudio\AppData\LocalLow\Element Games\Reality Break", "测试.package");
8
XFEPackage.UnPackFile("测试.package", "测试");
29
9
}
30
31
private static void XFEChatGPT_XFEChatGPTMessageReceived(object? sender, XFEExtension.NetCore.XFEChatGPT.ChatGPTInnerClass.HelperClass.MemorableGPTMessageReceivedEventArgs e)
32
{
33
switch (e.GenerateState)
34
{
35
case GenerateState.Start:
36
Console.Write(e.Message);
37
break;
38
case GenerateState.Continue:
39
Console.Write(e.Message);
40
break;
41
case GenerateState.End:
42
Console.WriteLine(e.Message);
43
break;
44
case GenerateState.Error:
45
Console.WriteLine(e.Message);
46
break;
47
default:
48
break;
49
}
50
}
51
//[SMTest]
52
//[UseXFEConsole]
53
//public static async Task TestMethod()
54
//{
55
// var testClass = new TestClass("测试类", "测试描述:我上早八", 56)
56
// {
57
// Tags = [["标签11", "标签12"], ["标签21", "标签22"]]
58
// };
59
// Console.WriteLine(testClass);
60
// Console.WriteLine("Program End");
61
// Console.ReadLine();
62
//}
63
10
}
@@ -112,7 +112,8 @@ public static class BufferExtension
112
112
}
113
113
for (long i = buffer.LongLength - originBuffer.LongLength + 1; i < buffer.LongLength; i++)
114
114
{
115
result.Add(buffer[i]);
115
if (i >= 0)
116
result.Add(buffer[i]);
116
117
}
117
118
return [.. result];
118
119
}
@@ -0,0 +1,104 @@
1
using XFEExtension.NetCore.BufferExtension;
2
3
namespace XFEExtension.NetCore.FileExtension.XFEPackage;
4
5
/// <summary>
6
/// XFE文件打包协议
7
/// </summary>
8
public static class XFEPackage
9
{
10
/// <summary>
11
/// 打包文件
12
/// </summary>
13
/// <param name="packageFilePath">待打包的文件夹路径</param>
14
/// <param name="fileName">打包后的文件路径</param>
15
public static void PackFile(string packageFilePath, string fileName) => File.WriteAllBytes(fileName, PackFile(packageFilePath));
16
17
/// <summary>
18
/// 打包文件
19
/// </summary>
20
/// <param name="packageFilePath">待打包的文件夹路径</param>
21
/// <returns>打包后的文件</returns>
22
public static byte[] PackFile(string packageFilePath)
23
{
24
var buffer = new XFEBuffer();
25
var packagedDirectory = GetFilePackage(packageFilePath);
26
buffer.Add(Path.GetFileName(packageFilePath), packagedDirectory.Package());
27
return buffer.ToBuffer();
28
}
29
30
/// <summary>
31
/// 解包文件
32
/// </summary>
33
/// <param name="packageFilePath">待解包文件路径</param>
34
/// <param name="outputDirectory">输出文件夹</param>
35
public static void UnPackFile(string packageFilePath, string outputDirectory) => UnPackFile(packageFilePath).UnPackage(outputDirectory);
36
37
/// <summary>
38
/// 解包文件
39
/// </summary>
40
/// <param name="packageFilePath">待解包文件路径</param>
41
/// <returns>解包后的文件</returns>
42
public static XFEPackagedDirectory UnPackFile(string packageFilePath) => GetFilePackage(File.ReadAllBytes(packageFilePath));
43
44
internal static XFEPackagedDirectory GetFilePackage(string packageFilePath)
45
{
46
if (!Directory.Exists(packageFilePath))
47
{
48
throw new DirectoryNotFoundException();
49
}
50
var packagedDirectory = new XFEPackagedDirectory
51
{
52
Name = Path.GetFileName(packageFilePath)
53
};
54
foreach (var file in Directory.GetFiles(packageFilePath))
55
{
56
var packagedFile = new XFEPackagedFile
57
{
58
Name = Path.GetFileName(file),
59
Data = File.ReadAllBytes(file)
60
};
61
packagedDirectory.PackagedFiles.Add(packagedFile);
62
}
63
foreach (var directory in Directory.GetDirectories(packageFilePath))
64
packagedDirectory.PackagedDirectories.Add(GetFilePackage(directory));
65
return packagedDirectory;
66
}
67
68
internal static XFEPackagedDirectory GetFilePackage(byte[] filePackageBytes)
69
{
70
var buffer = XFEBuffer.ToXFEBuffer(filePackageBytes);
71
if (buffer.FirstOrDefault() is KeyValuePair<string, byte[]> keyValuePair)
72
return GetFilePackageRecursion(keyValuePair.Key, keyValuePair.Value);
73
else
74
return new XFEPackagedDirectory();
75
}
76
77
internal static XFEPackagedDirectory GetFilePackageRecursion(string packageName, byte[] filePackageBytes)
78
{
79
var packagedDirectory = new XFEPackagedDirectory
80
{
81
Name = packageName
82
};
83
var buffer = XFEBuffer.ToXFEBuffer(filePackageBytes);
84
foreach (var (name, data) in buffer)
85
{
86
if (name.StartsWith("D|"))
87
{
88
var packagedSubDirectory = GetFilePackageRecursion(name, data);
89
packagedSubDirectory.Name = name[2..];
90
packagedDirectory.PackagedDirectories.Add(packagedSubDirectory);
91
}
92
else
93
{
94
var packagedFile = new XFEPackagedFile
95
{
96
Name = name,
97
Data = data
98
};
99
packagedDirectory.PackagedFiles.Add(packagedFile);
100
}
101
}
102
return packagedDirectory;
103
}
104
}
@@ -0,0 +1,12 @@
1
namespace XFEExtension.NetCore.FileExtension.XFEPackage;
2
3
/// <summary>
4
/// 打包基类
5
/// </summary>
6
public abstract class XFEPackageBase
7
{
8
/// <summary>
9
/// 文件或目录名
10
/// </summary>
11
public string Name { get; set; } = string.Empty;
12
}
@@ -0,0 +1,45 @@
1
using XFEExtension.NetCore.BufferExtension;
2
3
namespace XFEExtension.NetCore.FileExtension.XFEPackage;
4
5
/// <summary>
6
/// 打包目录
7
/// </summary>
8
public class XFEPackagedDirectory : XFEPackageBase
9
{
10
/// <summary>
11
/// 打包的文件
12
/// </summary>
13
public List<XFEPackagedFile> PackagedFiles { get; set; } = [];
14
/// <summary>
15
/// 打包的目录
16
/// </summary>
17
public List<XFEPackagedDirectory> PackagedDirectories { get; set; } = [];
18
19
/// <summary>
20
/// 打包
21
/// </summary>
22
/// <returns></returns>
23
public byte[] Package()
24
{
25
var buffer = new XFEBuffer();
26
foreach (var packagedFile in PackagedFiles)
27
buffer.Add(packagedFile.Name, packagedFile.Data);
28
foreach (var packagedDirectory in PackagedDirectories)
29
buffer.Add($"D|{packagedDirectory.Name}", packagedDirectory.Package());
30
return buffer.ToBuffer();
31
}
32
33
/// <summary>
34
/// 解包
35
/// </summary>
36
/// <param name="path">指定目录</param>
37
public void UnPackage(string path)
38
{
39
Directory.CreateDirectory(path);
40
foreach (var packagedFile in PackagedFiles)
41
File.WriteAllBytes(Path.Combine(path, packagedFile.Name), packagedFile.Data);
42
foreach (var packagedDirectory in PackagedDirectories)
43
packagedDirectory.UnPackage(Path.Combine(path, packagedDirectory.Name));
44
}
45
}
@@ -0,0 +1,12 @@
1
namespace XFEExtension.NetCore.FileExtension.XFEPackage;
2
3
/// <summary>
4
/// 打包文件
5
/// </summary>
6
public class XFEPackagedFile : XFEPackageBase
7
{
8
/// <summary>
9
/// 文件数据
10
/// </summary>
11
public byte[] Data { get; set; } = [];
12
}
@@ -5,7 +5,7 @@
5
5
<ImplicitUsings>enable</ImplicitUsings>
6
6
<Nullable>enable</Nullable>
7
7
<GenerateDocumentationFile>True</GenerateDocumentationFile>
8
<Version>3.2.9</Version>
8
<Version>3.3.0</Version>
9
9
<Title>XFEExtension</Title>
10
10
<RepositoryUrl>https://github.com/XFEstudio/XFEExtension</RepositoryUrl>
11
11
<AnalysisLevel>latest</AnalysisLevel>
@@ -20,8 +20,15 @@
20
20
<PackageTags>XFE;拓展;GPT;Server;服务器;测试;XFEExtension</PackageTags>
21
21
<PackageReleaseNotes>
22
22
## 调整
23
24
优化了XFEBuffer的枚举器实现方式
23
24
重构文件打包功能并更新版本号
25
26
- 修复 `BufferExtension.cs` 中的数组越界问题。
27
- 更新 `XFEExtension.NetCore.csproj` 的版本号至 `3.3.0`。
28
- 新增 `XFEPackage` 类,提供文件打包和解包的逻辑。
29
- 新增抽象基类 `XFEPackageBase`,定义文件和目录的基本属性。
30
- 新增 `XFEPackagedDirectory` 类,表示打包目录及其文件和子目录。
31
- 新增 `XFEPackagedFile` 类,表示打包文件及其数据。
25
32
26
33
## 新增
27
34