From 39663bdb9352c6a414e386393c008ef9619f090e Mon Sep 17 00:00:00 2001 From: Music_Die Date: Tue, 25 Apr 2023 16:15:34 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E4=B8=BAdwg=E6=96=87?= =?UTF-8?q?=E4=BB=B6=E6=B7=BB=E5=8A=A0=E6=A0=87=E8=AE=B0=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ExtensionMethod/DwgMark.cs | 63 +++++++++++++++++++ .../IFox.CAD.Shared/IFox.CAD.Shared.projitems | 1 + tests/TestShared/TestDwgMark.cs | 11 ++++ tests/TestShared/TestShared.projitems | 1 + 4 files changed, 76 insertions(+) create mode 100644 src/CAD/IFox.CAD.Shared/ExtensionMethod/DwgMark.cs create mode 100644 tests/TestShared/TestDwgMark.cs diff --git a/src/CAD/IFox.CAD.Shared/ExtensionMethod/DwgMark.cs b/src/CAD/IFox.CAD.Shared/ExtensionMethod/DwgMark.cs new file mode 100644 index 0000000..c82ed23 --- /dev/null +++ b/src/CAD/IFox.CAD.Shared/ExtensionMethod/DwgMark.cs @@ -0,0 +1,63 @@ +namespace IFoxCAD.Cad; +/// +/// 为dwg文件添加标记 +/// +public static class DwgMark +{ + + private const int FREESPACE = 0x15; + private const int FREESPACEDEFAULT = 0x00; + /// + /// 为dwg文件添加标识 + /// + /// DWG文件 + /// ASCII标识字节0X00~0X7F + /// 非dwg文件会报错,给定bite超界限也报错 + public static void AddMark(FileInfo file, int bite) + { + if (file.Extension.ToLower() != ".dwg") + { + throw new ArgumentException("必须是dwg文件!"); + } + if (bite > 0x7F || bite < 0x00) + { + throw new ArgumentException("字符必须在ASCII范围!"); + } + using BinaryWriter bw = new BinaryWriter(File.Open(file.FullName, FileMode.Open)); + bw.BaseStream.Position = FREESPACE;//文件头第21个字节 + bw.Write(bite); //写入数据,仅一个字节 + } + /// + /// 将dwg文件标记恢复为默认值 + /// + /// 文件 + /// 非dwg文件会报错 + public static void RemoveMark(FileInfo file) + { + if (file.Extension.ToLower() != ".dwg") + { + throw new ArgumentException("必须是dwg文件!"); + } + using BinaryWriter bw = new BinaryWriter(File.Open(file.FullName, FileMode.Open)); + bw.BaseStream.Position = FREESPACE;//文件头第21个字节 + bw.Write(FREESPACEDEFAULT); //写入数据,仅一个字节 + } + /// + /// 获取设置的dwg文件标记 + /// + /// 文件 + /// + /// 非dwg文件会报错 + public static int GetMark(FileInfo file) + { + if (file.Extension.ToLower() != ".dwg") + { + throw new ArgumentException("必须是dwg文件!"); + } + using FileStream fs = File.OpenRead(file.FullName); + fs.Seek(FREESPACE, SeekOrigin.Begin); + byte[] mark = new byte[1]; + fs.Read(mark, 0, mark.Length); + return mark[0]; + } +} diff --git a/src/CAD/IFox.CAD.Shared/IFox.CAD.Shared.projitems b/src/CAD/IFox.CAD.Shared/IFox.CAD.Shared.projitems index 13b7df2..c77cbc0 100644 --- a/src/CAD/IFox.CAD.Shared/IFox.CAD.Shared.projitems +++ b/src/CAD/IFox.CAD.Shared/IFox.CAD.Shared.projitems @@ -28,6 +28,7 @@ + diff --git a/tests/TestShared/TestDwgMark.cs b/tests/TestShared/TestDwgMark.cs new file mode 100644 index 0000000..cf0d712 --- /dev/null +++ b/tests/TestShared/TestDwgMark.cs @@ -0,0 +1,11 @@ +namespace Test; +using IFoxCAD.Cad; +public class TestDwgMark { + [CommandMethod(nameof(DwgMarktest))] + public void DwgMarktest() { + FileInfo file = new FileInfo(@"D:\TEST\1.dwg"); + DwgMark.AddMark(file, 0x4D); + DwgMark.RemoveMark(file); + int A = DwgMark.GetMark(file); + } +} \ No newline at end of file diff --git a/tests/TestShared/TestShared.projitems b/tests/TestShared/TestShared.projitems index 105f637..dd9a61c 100644 --- a/tests/TestShared/TestShared.projitems +++ b/tests/TestShared/TestShared.projitems @@ -19,6 +19,7 @@ + -- Gitee