C#生成anb文件

简介: C#生成anb文件

今天我们来看看C#中如何生成anb文件。

这个anb文件本来是要对接别的平台的,人家提供给我们一个协议,然后通过程序来生成,然后对方会根据生成的anb文件进行解析,然后得到心电图啥的。

代码如下:

private void createFileBtn_Click(object sender, EventArgs e)

    {
        string fileName = "demo.anb";
        string filePath = @"D:\" + fileName;
        bool isFile = Directory.Exists(filePath);
        if (isFile)
        //{
        //    Directory.CreateDirectory(filePath);
        //}
        //else
        {
            Directory.Delete(filePath);
            // Directory.CreateDirectory(filePath);
        }
        string txtJson = this.txtJson.Text;
        if (string.IsNullOrWhiteSpace(txtJson))
        {
            MessageBox.Show("请输入对应的字符串");
            return;
        }
        string fileOtherPath = this.txtFilePath.Text;
        if (string.IsNullOrWhiteSpace(fileOtherPath))
        {
            MessageBox.Show("请输入ECG文件路径");
            return;
        }
        // byte[] txtByte = Encoding.Unicode.GetBytes(txtJson);
        FileStream fs = new FileStream(fileOtherPath, FileMode.Open, FileAccess.Read);
        byte[] fsEcg = new byte[fs.Length];
        fs.Read(fsEcg, 0, Convert.ToInt32(fs.Length));
        fs.Close();

        var allVoltageText = File.ReadAllText(fileOtherPath);
        allVoltageText = allVoltageText.Trim('"');
        var allVoltageValues = allVoltageText.Split(',').Select(t => short.Parse(t)).ToArray();

        //List<byte> list = new List<byte>();
        //list.AddRange(txtByte);
        //list.AddRange(fsEcg);
        //byte[] data = list.ToArray();
        //Stream input = new MemoryStream(data);
        //FileStream file = new FileStream(filePath, FileMode.OpenOrCreate);
        //BinaryWriter binaryWriter = new BinaryWriter(file);
        //for (int i = 0; i < txtByte.Length; i++)
        //{
        //    binaryWriter.Write(txtByte[i]);
        //}
        //for (int i = 0; i < fsEcg.Length; i++)
        //{
        //    binaryWriter.Write(fsEcg[i]);
        //}
        //char[] cChar = Encoding.ASCII.GetChars(txtByte);
        //binaryWriter.Write(cChar);
        //char[] ecgChar = Encoding.ASCII.GetChars(fsEcg);
        //binaryWriter.Write(ecgChar);
        //binaryWriter.Flush();
        //binaryWriter.Close();
        //file.Close();
        Stream stream = new FileStream(filePath, FileMode.OpenOrCreate);



        //int count = fsEcg.Length >> 1;
        //short[] dest = new short[count];
        //for (int i = 0; i < count; i++)
        //{
        //    dest[i] = (short)(fsEcg[i * 2] << 8 | fsEcg[2 * i + 1] & 0xff);
        //}

        Write(stream, txtJson, allVoltageValues);
        stream.Dispose();

    }
/// <summary>
        /// 生成.anb文件
        /// </summary>
        /// <param name="stream">目标文件流</param>
        /// <param name="header">文件头结构</param>
        /// <param name="leadDatas">心电数据</param>
        /// <param name="convertData"></param>
        /// <returns></returns>
        public static bool Write(Stream stream, string header, short[] leadDatas)
        {
            BinaryWriter bw = new BinaryWriter(stream);
            try
            {
                byte[] headerBuffer = Encoding.UTF8.GetBytes(header);
                bw.Write(headerBuffer.Length);
                bw.Write(headerBuffer);
                for (int i = 0; i < leadDatas.Length; i++)
                {
                    bw.Write(leadDatas[i]);
                }
                //if (header.IsTimeOrder)
                //{
                //    for (int i = 0; i < leadDatas[0].Length; i++)
                //    {
                //        for (int j = 0; j < leadDatas.Length; j++)
                //        {
                //            bw.Write(convertData(leadDatas[j][i]));
                //        }
                //    }
                //}
                //else
                //{
                //    foreach (short[] leadData in leadDatas)
                //    {
                //        foreach (short data in leadData)
                //        {
                //            bw.Write(convertData(data));
                //        }
                //    }
                //}
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex);
                return false;
            }
            finally
            {
                bw.Flush();
            }

            return true;
        }

    }

}

生成的如下图所示:
在这里插入图片描述

目录
相关文章
|
2月前
|
XML C# 数据格式
使用C#操作XML文件
使用C#操作XML文件
12 0
|
2月前
|
C#
C# 文件操作(全部) 追加、拷贝、删除、移动文件、创建目录
C# 文件操作(全部) 追加、拷贝、删除、移动文件、创建目录
23 0
|
4月前
|
C#
C#读取html文件
C#读取html文件
31 3
|
4月前
|
C# 开发者
C# 10.0中的文件范围命名空间:简化代码组织的新方式
【1月更文挑战第18天】C# 10.0引入了文件范围的命名空间,这是一种新的语法糖,用于更简洁地组织和管理代码。文件范围命名空间允许开发者在每个文件的基础上定义命名空间,而无需显式使用花括号包裹整个文件内容。本文将深入探讨文件范围命名空间的工作原理、使用场景以及它们为C#开发者带来的便利。
|
6月前
|
C#
Visual Studio C# CS0006 C# 未能找到元数据文件
Visual Studio C# CS0006 C# 未能找到元数据文件
66 0
Visual Studio C# CS0006 C# 未能找到元数据文件
|
11天前
|
XML C# 数据格式
C# 解析XML文件
C# 解析XML文件
18 1
|
5月前
|
IDE C# 开发工具
C# | 多线程批量下载文件(创建N个线程同时批量下载文件,只需要几行代码而已)
批量下载文件时使用多线程可以有效缩短完成时间,本文将讲解如何使用C#+CodePlus扩展库快速完成多线程的文件下载。 大部分代码由IDE自动生成,需要我们自己编写的代码正好**10行**。也就是说,只需要10分钟,就可以手撸一个多线程的批量下载器。
89 0
C# | 多线程批量下载文件(创建N个线程同时批量下载文件,只需要几行代码而已)
|
2月前
|
安全 数据处理 C#
C# Post数据或文件到指定的服务器进行接收
C# Post数据或文件到指定的服务器进行接收
|
2月前
|
C# 开发工具 数据安全/隐私保护
C#实现基于Word保护性模板文件的修改
C#实现基于Word保护性模板文件的修改