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 0000000000000000000000000000000000000000..c82ed2334538493681887bc0b32be479d45a218a --- /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 13b7df2fab9bc27b4d9543cabe8484f13627972f..c77cbc0db6addd99b35ac4e60c115857dd46af3c 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 0000000000000000000000000000000000000000..cf0d712a10b0a146bf02f9985329a7b2ad7eb4b4 --- /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 105f637098c07b1bd5b0043e9c63a50d34b41c03..dd9a61c7bf09dd35163d36749f6f014550dc3f2c 100644 --- a/tests/TestShared/TestShared.projitems +++ b/tests/TestShared/TestShared.projitems @@ -19,6 +19,7 @@ +