XFE Git
XFE Studio Git
Git 首页 全局搜索
XFE 主站 文档 NuGet

XFEExtension

【DLL】XFE各类拓展是一个C#的DLL库,旨在优化C#代码中常用语句的使用,并提供更简洁的访问方式,同时提供Xunit测试框架,快速搭建服务器/客户端,免费ChatGPTAPI接口,免费通讯服务器,XFE下载器,新增格式等

公开
关注 0 Fork 0 Star 0
返回提交历史

XFEstudio/XFEExtension

重构文件打包功能并更新版本号

- 修复 `BufferExtension.cs` 中的数组越界问题。 - 更新 `XFEExtension.NetCore.csproj` 的版本号至 `3.3.0`。 - 新增 `XFEPackage` 类,提供文件打包和解包的逻辑。 - 新增抽象基类 `XFEPackageBase`,定义文件和目录的基本属性。 - 新增 `XFEPackagedDirectory` 类,表示打包目录及其文件和子目录。 - 新增 `XFEPackagedFile` 类,表示打包文件及其数据。

c93695b
XFE工作室室长 <mail@xfegzs.com>
提交于

代码差异

7 个文件 +188 -60
Modified XFEExtension.NetCore.Test/Program.cs +3 -56
@@ -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 }
Modified XFEExtension.NetCore/BufferExtension/BufferExtension.cs +2 -1
@@ -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 }
Added XFEExtension.NetCore/FileExtension/XFEPackage/XFEPackage.cs +104 -0
@@ -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 }
Added XFEExtension.NetCore/FileExtension/XFEPackage/XFEPackageBase.cs +12 -0
@@ -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 }
Added XFEExtension.NetCore/FileExtension/XFEPackage/XFEPackagedDirectory.cs +45 -0
@@ -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 }
Added XFEExtension.NetCore/FileExtension/XFEPackage/XFEPackagedFile.cs +12 -0
@@ -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 }
Modified XFEExtension.NetCore/XFEExtension.NetCore.csproj +10 -3
@@ -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