/// <summary>
        /// 把单行线都统一为增里程(包括正方向和反方向)
        /// </summary>
        /// <param name="citFileName">cit文件路径</param>
        public void ModifyCitMergeKmInc(String citFileName)
        {
            FileInformation citHeaderInfo = GetFileInformation(citFileName);

            bool isKmInc = IsCitKmInc(citFileName);

            //文件头中指示为增里程,且文件中确实为增里程,则不需要处理,直接返回。
            if (citHeaderInfo.iKmInc == 0 && isKmInc == true)
            {
                return;
            }

            //以下情况:有可能是文件头指示错误或是实际文件确实为减里程
            //统一为增里程
            if (citHeaderInfo.iKmInc != 0)
            {
                citHeaderInfo.iKmInc = 0;
            }


            try
            {
                #region 存取文件
                FileStream   fsRead    = new FileStream(citFileName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
                FileStream   fsWrite   = new FileStream(citFileName + ".bak", FileMode.Create, FileAccess.Write, FileShare.ReadWrite);
                BinaryReader br        = new BinaryReader(fsRead, Encoding.UTF8);
                BinaryWriter bw1       = new BinaryWriter(fsWrite, Encoding.UTF8);
                byte[]       bHead     = br.ReadBytes(120);
                byte[]       bChannels = br.ReadBytes(65 * citHeaderInfo.iChannelNumber);
                byte[]       bData     = new byte[citHeaderInfo.iChannelNumber * 2];
                byte[]       bDataNew  = new byte[citHeaderInfo.iChannelNumber * 2];
                byte[]       bTail     = br.ReadBytes(BitConverter.ToInt32(br.ReadBytes(4), 0));

                //bw1.Write(bHead);

                bw1.Write(GetBytesFromDataHeadInfo(citHeaderInfo));//文件头
                FileInformation citHeader = GetDataInfoHead(GetBytesFromDataHeadInfo(citHeaderInfo));


                bw1.Write(bChannels);
                bw1.Write(bTail.Length);
                bw1.Write(bTail);

                long startPos = br.BaseStream.Position;//记录数据开始位置的文件指针

                //增里程时,不反转
                if (isKmInc == true)
                {
                    while (br.BaseStream.Position < br.BaseStream.Length)
                    {
                        bw1.Write(br.ReadBytes(citHeaderInfo.iChannelNumber * 2));
                        //br.BaseStream.Position += m_dhi.iChannelNumber * 2;
                    }
                }
                else
                {
                    br.BaseStream.Position = br.BaseStream.Length - citHeaderInfo.iChannelNumber * 2;

                    while (br.BaseStream.Position >= startPos)
                    {
                        bw1.Write(br.ReadBytes(citHeaderInfo.iChannelNumber * 2));
                        br.BaseStream.Position -= citHeaderInfo.iChannelNumber * 2 * 2; //liyang: 这块怎么乘以4了 ?
                    }
                }

                //
                bw1.Close();
                br.Close();
                fsWrite.Close();
                fsRead.Close();
                //删除bak
                File.Delete(citFileName);
                File.Move(citFileName + ".bak", citFileName);
                #endregion
            }
            catch (System.Exception ex)
            {
                throw ex;
            }

            return;
        }
        /// <summary>
        /// 向cit文件中写入文件头、数据块
        /// </summary>
        /// <param name="citFile">cit文件路径</param>
        /// <param name="fi">文件信息</param>
        /// <param name="channelList">通道定义集合</param>
        /// <param name="extraInfo">补充信息</param>
        /// <param name="arrayDone">通道数据数组集合</param>
        /// <returns>true:成功;false:失败</returns>
        private bool WriteCitFileTemp(string citFile, FileInformation fi, List <ChannelDefinition> channelList, string extraInfo, List <double[]> arrayDone)
        {
            try
            {
                using (FileStream fsWrite = new FileStream(citFile, FileMode.OpenOrCreate, FileAccess.Write, FileShare.ReadWrite))
                {
                    using (BinaryWriter bw = new BinaryWriter(fsWrite, Encoding.UTF8))
                    {
                        //写文件头文件信息
                        bw.Write(GetBytesFromDataHeadInfo(fi));
                        //写文件头通道定义
                        bw.Write(GetBytesFromChannelDataInfoList(channelList));
                        //写文件头补充信息
                        byte[] tmpBytes = UnicodeEncoding.Default.GetBytes(extraInfo);
                        //bw.Write((Byte)(tmpBytes.Length));
                        bw.Write(tmpBytes);
                        if (tmpBytes.Length < 4)
                        {
                            for (int i = 0; i < (4 - tmpBytes.Length); i++)
                            {
                                bw.Write((byte)0);
                            }
                        }

                        int    iChannelNumberSize = fi.iChannelNumber * 2;
                        byte[] dataArray          = new byte[iChannelNumberSize];

                        List <Byte> dataList     = new List <Byte>();
                        short       tmpRmsData   = 0;
                        Byte[]      tmpDataBytes = new Byte[2];

                        long iArrayLen = arrayDone[0].Length;
                        for (int k = 0; k < iArrayLen; k++)
                        {
                            if (Encryption.IsEncryption(fi.sDataVersion))
                            {
                                for (int iTmp = 0; iTmp < channelList.Count; iTmp++)
                                {
                                    tmpRmsData   = (short)((arrayDone[iTmp][k] - channelList[iTmp].fOffset) * channelList[iTmp].fScale);
                                    tmpDataBytes = Encryption.Translate(BitConverter.GetBytes(tmpRmsData));
                                    dataList.AddRange(tmpDataBytes);
                                }
                            }
                            else
                            {
                                for (int iTmp = 0; iTmp < channelList.Count; iTmp++)
                                {
                                    tmpRmsData = (short)((arrayDone[iTmp][k] - channelList[iTmp].fOffset) * channelList[iTmp].fScale);
                                    dataList.AddRange(BitConverter.GetBytes(tmpRmsData));
                                }
                            }
                            dataList.Clear();
                        }

                        bw.Close();
                    }
                    fsWrite.Close();
                }
                return(true);
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }
        }
        /// <summary>
        /// 把反方向检测转换为正方向检测
        /// </summary>
        /// <param name="citFileName">cit文件路径</param>
        public void ModifyCitReverseToForward(String citFileName)
        {
            FileInformation          citHeaderInfo = GetFileInformation(citFileName);
            List <ChannelDefinition> channelList   = GetChannelDefinitionList(citFileName);


            //左高低与右高低对调
            ChannelExchange(channelList, "L_Prof_SC", "R_Prof_SC", false);
            ChannelExchange(channelList, "L_Prof_SC_70", "R_Prof_SC_70", false);
            ChannelExchange(channelList, "L_Prof_SC_120", "R_Prof_SC_120", false);

            ChannelDefinition m_dci_a = new ChannelDefinition();

            //左轨向与右轨向对调,然后幅值*(-1)
            ChannelExchange(channelList, "L_Align_SC", "R_Align_SC", true);
            ChannelExchange(channelList, "L_Align_SC_70", "R_Align_SC_70", true);
            ChannelExchange(channelList, "L_Align_SC_120", "R_Align_SC_120", true);


            //水平、超高、三角坑、曲率、曲率变化率*(-1)
            for (int i = 0; i < channelList.Count; i++)
            {
                if (channelList[i].sNameEn.Equals("Crosslevel"))
                {
                    m_dci_a        = channelList[i];
                    m_dci_a.fScale = m_dci_a.fScale * (-1);
                    channelList[i] = m_dci_a;
                }

                if (channelList[i].sNameEn.Equals("Superelevation"))
                {
                    m_dci_a        = channelList[i];
                    m_dci_a.fScale = m_dci_a.fScale * (-1);
                    channelList[i] = m_dci_a;
                }

                if (channelList[i].sNameEn.Equals("Short_Twist"))
                {
                    m_dci_a        = channelList[i];
                    m_dci_a.fScale = m_dci_a.fScale * (-1);
                    channelList[i] = m_dci_a;
                }

                if (channelList[i].sNameEn.Equals("Curvature"))
                {
                    m_dci_a        = channelList[i];
                    m_dci_a.fScale = m_dci_a.fScale * (-1);
                    channelList[i] = m_dci_a;
                }

                if (channelList[i].sNameEn.Equals("Curvature_Rate"))
                {
                    m_dci_a        = channelList[i];
                    m_dci_a.fScale = m_dci_a.fScale * (-1);
                    channelList[i] = m_dci_a;
                }
            }


            try
            {
                #region 存取文件
                FileStream   fsRead    = new FileStream(citFileName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
                FileStream   fsWrite   = new FileStream(citFileName + ".bak", FileMode.Create, FileAccess.Write, FileShare.ReadWrite);
                BinaryReader br        = new BinaryReader(fsRead, Encoding.UTF8);
                BinaryWriter bw1       = new BinaryWriter(fsWrite, Encoding.UTF8);
                byte[]       bHead     = br.ReadBytes(120);
                byte[]       bChannels = br.ReadBytes(65 * citHeaderInfo.iChannelNumber);
                byte[]       bData     = new byte[citHeaderInfo.iChannelNumber * 2];
                byte[]       bDataNew  = new byte[citHeaderInfo.iChannelNumber * 2];
                byte[]       bTail     = br.ReadBytes(BitConverter.ToInt32(br.ReadBytes(4), 0));

                //bw1.Write(bHead);

                bw1.Write(GetBytesFromDataHeadInfo(citHeaderInfo));//文件头
                //反向--转换为正向
                if (citHeaderInfo.iRunDir == 0)
                {
                    bw1.Write(bChannels);
                }
                else
                {
                    bw1.Write(GetBytesFromChannelDataInfoList(channelList));
                }

                bw1.Write(bTail.Length);
                bw1.Write(bTail);

                long startPos = br.BaseStream.Position;//记录数据开始位置的文件指针

                while (br.BaseStream.Position < br.BaseStream.Length)
                {
                    bw1.Write(br.ReadBytes(citHeaderInfo.iChannelNumber * 2));
                }
                bw1.Close();
                br.Close();
                fsWrite.Close();
                fsRead.Close();
                //删除bak
                File.Delete(citFileName);
                File.Move(citFileName + ".bak", citFileName);
                #endregion
            }
            catch (System.Exception ex)
            {
                throw ex;
            }
        }