Beispiel #1
0
		// 初始化本对象
		// 从外部给的lChannel,在使用完后一定要设置为-1,否则会导致多次Destroy()
		public int Initial(DtlpChannelArray channels,
			string strDBPath,
			string strStartNumber,
			string strEndNumber)
		{
            Debug.Assert(channels != null, "channels参数不能为null");

            this.Channels = channels;
			this.channel = this.Channels.CreateChannel(0);

			// Debug.Assert(channel != null, "channel参数不能为null");


			/*
			pConnect->m_strDefUserName = strDefUserName;
			pConnect->m_strDefPassword = strDefPassword;
			*/

			Debug.Assert(strStartNumber != "",
				"strStartNumber参数不能为空");
			m_strStartNumber = strStartNumber;

			Debug.Assert(strEndNumber != "",
				"strEndNumber参数不能为空");
			m_strEndNumber = strEndNumber;

			Debug.Assert(strDBPath != "",
				"strDBPath参数不能为空");
			m_strDBPath = strDBPath;			// 数据库路径

			return 0;
		}
Beispiel #2
0
        private void DtlpLogForm_Load(object sender, EventArgs e)
        {
            stop = new DigitalPlatform.Stop();
            stop.Register(MainForm.stopManager, true);	// 和容器关联


            // 初始化ChannelArray
            channelArray.appInfo = MainForm.AppInfo;
            channelArray.AskAccountInfo += new AskDtlpAccountInfoEventHandle(channelArray_AskAccountInfo);
            /*
            channelArray.procAskAccountInfo = new Delegate_AskAccountInfo(
                this.AskAccountInfo);
             * */

            // 准备唯一的通道
            if (this.Channel == null)
            {
                this.Channel = channelArray.CreateChannel(0);
            }

            this.textBox_serverAddr.Text = MainForm.AppInfo.GetString(
    "dtlplogform",
    "serveraddr",
    ""); 

            this.textBox_logFileName.Text = MainForm.AppInfo.GetString(
    "dtlplogform",
    "logfilename",
    "");

            this.marcEditor_record.FieldNameCaptionWidth = 0;

        }
Beispiel #3
0
        private void DtlpLogForm_Load(object sender, EventArgs e)
        {
            stop = new DigitalPlatform.Stop();
            stop.Register(MainForm.stopManager, true);  // 和容器关联


            // 初始化ChannelArray
            channelArray.appInfo         = MainForm.AppInfo;
            channelArray.AskAccountInfo += new AskDtlpAccountInfoEventHandle(channelArray_AskAccountInfo);

            /*
             * channelArray.procAskAccountInfo = new Delegate_AskAccountInfo(
             *  this.AskAccountInfo);
             * */

            // 准备唯一的通道
            if (this.Channel == null)
            {
                this.Channel = channelArray.CreateChannel(0);
            }

            this.textBox_serverAddr.Text = MainForm.AppInfo.GetString(
                "dtlplogform",
                "serveraddr",
                "");

            this.textBox_logFileName.Text = MainForm.AppInfo.GetString(
                "dtlplogform",
                "logfilename",
                "");

            this.marcEditor_record.FieldNameCaptionWidth = 0;
        }
Beispiel #4
0
        // 初始化本对象
        // 从外部给的lChannel,在使用完后一定要设置为-1,否则会导致多次Destroy()
        public int Initial(DtlpChannelArray channels,
                           string strDBPath,
                           string strStartNumber,
                           string strEndNumber)
        {
            Debug.Assert(channels != null, "channels参数不能为null");

            this.Channels = channels;
            this.channel  = this.Channels.CreateChannel(0);

            // Debug.Assert(channel != null, "channel参数不能为null");


            /*
             * pConnect->m_strDefUserName = strDefUserName;
             * pConnect->m_strDefPassword = strDefPassword;
             */

            Debug.Assert(strStartNumber != "",
                         "strStartNumber参数不能为空");
            m_strStartNumber = strStartNumber;

            Debug.Assert(strEndNumber != "",
                         "strEndNumber参数不能为空");
            m_strEndNumber = strEndNumber;

            Debug.Assert(strDBPath != "",
                         "strDBPath参数不能为空");
            m_strDBPath = strDBPath;                                    // 数据库路径

            return(0);
        }
Beispiel #5
0
        public int Initial(DtlpChannelArray channels,
                           DtlpChannel channel)
        {
            this.dtlpResDirControl1.channelarray = channels;
            this.dtlpResDirControl1.Channel      = channel;

            return(0);
        }
Beispiel #6
0
        // 创建一个新通道
        public DtlpChannel CreateChannel(int usrid)
        {
            DtlpChannel channel = new DtlpChannel();

            channel.Container = this;
            channel.m_lUsrID  = usrid;
            channel.InitialHostArray();

            this.Add(channel);

            return(channel);
        }
Beispiel #7
0
        private void listView_records_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (this.listView_records.SelectedItems.Count == 0)
            {
                this.textBox_worksheet.Text   = "";
                this.marcEditor_record.Marc   = "";
                this.textBox_description.Text = "";
            }
            else
            {
                LogItemInfo info = (LogItemInfo)this.listView_records.SelectedItems[0].Tag;
                if (info != null)
                {
                    this.textBox_worksheet.Text = info.Encoding.GetString(info.OriginData).Replace(MarcUtil.SUBFLD, '$');
                    string strMARC = DtlpChannel.GetDt1000LogRecord(info.OriginData, info.Encoding);
                    this.marcEditor_record.Marc         = strMARC;
                    this.marcEditor_record.DocumentOrgX = 0;
                    this.marcEditor_record.DocumentOrgY = 0;

                    string strOperCode    = "";
                    string strOperComment = "";
                    string strOperPath    = "";
                    string strError       = "";

                    int nRet = DtlpChannel.ParseDt1000LogRecord(strMARC,
                                                                out strOperCode,
                                                                out strOperComment,
                                                                out strOperPath,
                                                                out strError);
                    if (nRet == -1)
                    {
                        this.textBox_description.Text = strError;
                    }
                    else
                    {
                        if (strOperCode == "12")
                        {
                            this.textBox_description.Text = "操作: " + strOperComment + "\r\n数据库名: " + strOperPath;
                        }
                        else
                        {
                            this.textBox_description.Text = "操作: " + strOperComment + "\r\n路径: " + strOperPath;
                        }
                    }
                }
                else
                {
                    this.textBox_worksheet.Text   = "(no origin data)";
                    this.marcEditor_record.Marc   = "";
                    this.textBox_description.Text = "";
                }
            }
        }
Beispiel #8
0
        // 得到下一条记录
        // return:
        //		-1	出错
        //		0	继续
        //		1	到达末尾(超过m_strEndNumber)
        //		2	没有找到记录
        public int NextRecord(ref int nRecCount,
                              out string strError)
        {
            strError = "";

            string strPath;
            string strNumber;
            string strNextNumber;

            byte[] baPackage = null;

            int nSearchStyle = DtlpChannel.XX_STYLE;
            int nRet;
            int nErrorNo;
            int nDirStyle = 0;                  // 方向风格

            byte[] baMARC = null;

            if (this.channel == null)
            {
                this.channel = this.Channels.CreateChannel(0);
            }

            Debug.Assert(m_strStartNumber != "",
                         "m_strStartNumber值不能为空");
            Debug.Assert(m_strEndNumber != "",
                         "m_strEndNumber值不能为空");

            // 首次进入本函数
            if (nRecCount == -1)
            {
                strNumber = m_strStartNumber;

                nDirStyle = 0;
                nRecCount = 0;
            }
            else
            {
                strNumber = m_strNextNumber;

                if (Convert.ToInt64(m_strStartNumber) <= Convert.ToInt64(m_strEndNumber))
                {
                    nDirStyle = DtlpChannel.NEXT_RECORD;
                    if (Convert.ToInt64(strNumber) >= Convert.ToInt64(m_strEndNumber))
                    {
                        return(1);                              // 结束
                    }
                }
                else
                {
                    nDirStyle = DtlpChannel.PREV_RECORD;
                    if (Convert.ToInt64(strNumber) <= Convert.ToInt64(m_strEndNumber))
                    {
                        return(1);                              // 结束
                    }
                }
            }


            strPath  = m_strDBPath;
            strPath += "/ctlno/";
            strPath += strNumber;

            //		REDO:
            nRet = channel.Search(strPath,
                                  nSearchStyle | nDirStyle,
                                  out baPackage);
            if (nRet == -1)
            {
                nErrorNo = channel.GetLastErrno();
                if (nErrorNo == DtlpChannel.GL_NOTLOGIN)
                {
                    // 重新登录的事情,已经被Search()接管了
                }
                else
                {
                    if (nErrorNo == DtlpChannel.GL_NOTEXIST)
                    {
                        // 增量号码
                        Int64  n64Number = Convert.ToInt64(strNumber);
                        string strVersion;

                        // GetDTLPVersion(m_strDBPath, strVersion);	// 可以将库名再去除,效果更好
                        strVersion = "0.9";

                        if (n64Number + 1 < 9999999 &&
                            strVersion == "0.9")
                        {
                            //strNumber.Format(_T("%I0764d"), n64Number+1);
                            // 确保7位数字
                            strNumber = String.Format("{0:D7}", n64Number + 1);                             // "{0,7:D}" BUG!!! 左边实际上是空格 2009/2/26
                        }
                        else
                        {
                            // strNumber.Format(_T("%I64d"), n64Number+1);
                            strNumber = String.Format("{0:D7}", n64Number + 1);  // "{0,7:D}" BUG!!! 左边实际上是空格 2009/2/26
                        }


                        m_strCurNumber = strNumber;
                        goto NOTFOUND;
                    }

                    this.ErrorNo = nErrorNo;

                    if (nErrorNo == DtlpChannel.GL_INVALIDCHANNEL)
                    {
                        this.channel = null;
                    }

                    // 得到字符串即可

                    /*
                     *                  channel.ErrorBox(owner, "DtlpIO",
                     *                          "检索发生错误\nSearch() error");
                     * */
                    strError = "检索发生错误\nSearch() error: \r\n" + channel.GetErrorDescription();
                    goto ERROR1;
                }

                m_strPath = strPath;

                goto ERROR1;
            }


            ///
            Package package = new Package();

            package.LoadPackage(baPackage, channel.GetPathEncoding(strPath));
            nRet = package.Parse(PackageFormat.Binary);
            if (nRet == -1)
            {
                Debug.Assert(false, "Package::Parse() error");
                strError = "Package::Parse() error";
                goto ERROR1;
            }

            nRet = package.GetFirstBin(out baMARC);
            if (nRet == -1 || nRet == 0)
            {
                Debug.Assert(false, "Package::GetFirstBin() error");
                strError = "Package::GetFirstBin() error";
                goto ERROR1;
            }

            if (baMARC.Length >= 9)
            {
                Array.Copy(baMARC, 0, m_baTimeStamp, 0, 9);

                byte [] baBody = new byte[baMARC.Length - 9];
                Array.Copy(baMARC, 9, baBody, 0, baMARC.Length - 9);
                baMARC = baBody;

                //baMARC.RemoveAt(0, 9);	// 时间戳
            }
            else
            {
                // 记录有问题,放入一个空记录?
            }

            // ---????????? 编写一个在byte[]末尾追加东西的函数?

            // baMARC = ByteArray.Add(baMARC, (byte)0);
            // baMARC.Add(0);
            // baMARC.Add(0);

            m_strRecord = channel.GetPathEncoding(strPath).GetString(baMARC);

            strPath = package.GetFirstPath();

            nRet = GetCtlNoFromPath(strPath,
                                    out strNextNumber);
            if (nRet == -1)
            {
                Debug.Assert(false, "GetCtlNoFromPath() return error ...");
                strError = "GetCtlNoFromPath() error ...";
                goto ERROR1;
            }

            m_strNextNumber = strNextNumber;

            if (nRecCount == 0)                 // 首次
            {
                m_strCurNumber = strNumber;
            }
            else
            {
                m_strCurNumber = strNextNumber;
            }

            m_strPath = strPath;                //

            nRecCount++;
            return(0);

ERROR1:
            return(-1);

NOTFOUND:
            return(2);
        }
Beispiel #9
0
        // 编辑配置文件
        void menuItem_editCfgFile_Click(object sender, EventArgs e)
        {
            string strError = "";
            string strContent = "";

            if (this.SelectedNode == null)
            {
                strError = "尚未选择要编辑的配置文件节点";
                goto ERROR1;
            }

            if (this.SelectedNode.ImageIndex != OFFS_CFGFILE)
            {
                strError = "所选择的节点不是配置文件类型";
                goto ERROR1;
            }

            string strPath = GetPath(this.SelectedNode, '/');

            if (Channel == null)
            {
                Channel = channelarray.CreateChannel(0);
            }

            Debug.Assert(Channel != null, "channel尚未初始化");

            Cursor.Current = Cursors.WaitCursor;
            int nRet = Channel.GetCfgFile(strPath,
                out strContent,
                out strError);
            Cursor.Current = Cursors.Default;

            if (nRet == -1)
                goto ERROR1;

            EditCfgForm dlg = new EditCfgForm();
            dlg.StartPosition = FormStartPosition.CenterScreen;
            dlg.CfgPath = strPath;
            dlg.Content = strContent;
            dlg.ShowDialog(this);

            if (dlg.DialogResult != DialogResult.OK)
                return;

            if (dlg.Changed == false)
                return;

            // 保存到(服务器端)配置文件
            // return:
            //      -1  出错
            //      0   成功
            Cursor.Current = Cursors.WaitCursor;
            nRet = Channel.WriteCfgFile(dlg.CfgPath,
                dlg.Content,
                out strError);
            Cursor.Current = Cursors.Default;
            if (nRet == -1)
                goto ERROR1;

            MessageBox.Show(this, "配置文件 '" + dlg.CfgPath +"' 保存成功");
            return;
        ERROR1:
            MessageBox.Show(this, strError);

        }
Beispiel #10
0
		// strStart, // 起始路径, ""表示根
		Package GetOneLevelDirPackage(string strStart)
		{
			int nRet;
			byte [] baPackage = null;

			// bool bSetDefault = false;	// 表示是否使用过缺省帐户

			//bool bFirstLogin = true;

			Package package = new Package();

			// CWaitCursor cursor;
			if (Channel == null) 
			{
				Channel = channelarray.CreateChannel(0);
			}

			Debug.Assert(Channel != null, "channel尚未初始化");

			Cursor.Current = Cursors.WaitCursor;
            if (Stop != null)
            {
                Stop.OnStop += new StopEventHandler(this.DoStop);
                Stop.SetMessage("正在列目录 '" + strStart + "' ...");
                Stop.BeginLoop();
            }
            try
            {
                nRet = Channel.Dir(strStart,
                    out baPackage);
            }
            finally
            {
                if (Stop != null)
                {
                    Stop.EndLoop();
                    Stop.OnStop -= new StopEventHandler(this.DoStop);
                    Stop.Initial("");
                }

                Cursor.Current = Cursors.Default;
            }

			if (nRet == -1) 
			{
				Channel.ErrorBox(this,
					"restree",
					"列目录发生错误");

				goto ERROR1;
			}


			package.LoadPackage(baPackage, Channel.GetPathEncoding(strStart));
			package.Parse(PackageFormat.String);

			return package;
			ERROR1:
				return null;
		}
Beispiel #11
0
        private void MainForm_Load(object sender, EventArgs e)
        {
            // 初始化数据目录
            if (ApplicationDeployment.IsNetworkDeployed == true)
            {
                // MessageBox.Show(this, "network");
                DataDir = Application.LocalUserAppDataPath;
            }
            else
            {
                // MessageBox.Show(this, "no network");
                DataDir = Environment.CurrentDirectory;
            }


            stopManager.Initial(this.toolButton_stop,
                (object)this.toolStripStatusLabel1,
                (object)this.toolStripProgressBar1);

            stop = new DigitalPlatform.Stop();
            stop.Register(this.stopManager, true);	// 和容器关联

            // DTLP
            this.textBox_dtlpAsAddress.Text = Settings.Default.DtlpAsAddress;
            this.textBox_dtlpUserName.Text = Settings.Default.DtlpUserName;

            this.checkBox_dtlpSavePassword.Checked = Settings.Default.DtlpSavePassword;

            if (this.checkBox_dtlpSavePassword.Checked == true)
            {
                string strPassword = Settings.Default.DtlpPassword;

                strPassword = this.DecryptPasssword(strPassword);

                this.textBox_dtlpPassword.Text = strPassword;
            }

            // DTLP协议
            this.DtlpChannelArray.AskAccountInfo += new AskDtlpAccountInfoEventHandle(channelArray_AskAccountInfo);
            // 准备唯一的通道
            if (this.DtlpChannel == null)
            {
                this.DtlpChannel = DtlpChannelArray.CreateChannel(0);
            }

            // dp2library协议
            this.textBox_dp2AsUrl.Text = Settings.Default.Dp2AsUrl;
            this.textBox_dp2UserName.Text = Settings.Default.Dp2UserName;

            this.checkBox_dp2SavePassword.Checked = Settings.Default.Dp2SavePassword;

            if (this.checkBox_dp2SavePassword.Checked == true)
            {
                string strPassword = Settings.Default.Dp2Password;

                strPassword = this.DecryptPasssword(strPassword);

                this.textBox_dp2Password.Text = strPassword;
            }

            API.PostMessage(this.Handle, WM_LOADSIZE, 0, 0);

        }
Beispiel #12
0
        // strStart, // 起始路径, ""表示根
        Package GetOneLevelDirPackage(string strStart,
            out string strError)
        {
            strError = "";
            int nRet;
            byte[] baPackage = null;

            // bool bSetDefault = false;	// 表示是否使用过缺省帐户

            //bool bFirstLogin = true;

            Package package = new Package();

            // CWaitCursor cursor;
            if (this.DtlpChannel == null)
            {
                this.DtlpChannel = this.DtlpChannelArray.CreateChannel(0);
            }

            Debug.Assert(this.DtlpChannel != null, "channel尚未初始化");

            Cursor.Current = Cursors.WaitCursor;

            nRet = this.DtlpChannel.Dir(strStart,
                out baPackage);

            Cursor.Current = Cursors.Default;

            if (nRet == -1)
            {
                strError = this.DtlpChannel.GetErrorDescription();
                goto ERROR1;
            }


            package.LoadPackage(baPackage, this.DtlpChannel.GetPathEncoding(strStart));
            package.Parse(PackageFormat.String);

            return package;
        ERROR1:
            return null;
        }
Beispiel #13
0
        // 获得日志记录
        // return:
        //      -1  出错
        //      0   日志文件不存在
        //      1   日志文件存在
        int GetLogRecords(string strServerAddr,
            string strLogFileName,
            out string strError)
        {
            strError = "";
            int nStartIndex = 0;

            stop.OnStop += new StopEventHandler(this.DoStop);
            stop.SetMessage("正在从服务器获得日志记录 ...");
            stop.BeginLoop();

            this.Update();
            this.MainForm.Update();

            try
            {

                string strPath = strServerAddr + "/log/" + strLogFileName + "/" + nStartIndex.ToString();

                bool bFirst = true;

                string strDate = "";
                int nRecID = -1;
                string strOffset = "";

                int nStyle = 0;

                for (int i = nStartIndex; ; i++)
                {
                    Application.DoEvents();	// 出让界面控制权

                    if (stop != null)
                    {
                        if (stop.State != 0)
                        {
                            strError = "用户中断";
                            return -1;
                        }
                    }

                    byte[] baPackage = null;

                    if (bFirst == true)
                    {
                    }
                    else
                    {
                        strPath = strServerAddr + "/log/" + strDate/*strLogFileName*/ + "/" + nRecID.ToString() + "@" + strOffset;
                    }

                    Encoding encoding = this.Channel.GetPathEncoding(strPath);

                    stop.SetMessage("正在获得日志记录 " + strPath);

                    int nRet = this.Channel.Search(strPath,
                        DtlpChannel.RIZHI_STYLE | nStyle,
                        out baPackage);
                    if (nRet == -1)
                    {
                        int errorcode = this.Channel.GetLastErrno();
                        if (errorcode == DtlpChannel.GL_NOTEXIST)
                        {
                            if (bFirst == true)
                                break;
                        }

                        // 更换新通道
                        if (errorcode == DtlpChannel.GL_INTR
                            || errorcode == DtlpChannel.GL_SEND
                            || errorcode == DtlpChannel.GL_RECV)
                        {
                            this.Channel = channelArray.CreateChannel(0);
                        }

                        strError = "获取日志记录:\r\n"
                            + "路径: " + strPath + "\r\n"
                            + "错误码: " + errorcode + "\r\n"
                            + "错误信息: " + this.Channel.GetErrorString(errorcode) + "\r\n";
                        return -1;
                    }


                    // 解析出记录
                    Package package = new Package();
                    package.LoadPackage(baPackage,
                        encoding);
                    package.Parse(PackageFormat.Binary);

                    // 获得下一路径
                    string strNextPath = "";
                    strNextPath = package.GetFirstPath();
                    if (String.IsNullOrEmpty(strNextPath) == true)
                    {
                        if (this.checkBox_loop.Checked == true)
                        {
                            i--;
                            continue;
                        }

                        if (bFirst == true)
                        {
                            strError = "文件 " + strLogFileName + "不存在";
                            return 0;
                        }
                        // strError = "检索 '" + strPath + "' 响应包中路径部分不存在 ...";
                        // return -1;
                        break;
                    }

                    // 获得记录内容
                    byte[] baContent = null;
                    nRet = package.GetFirstBin(out baContent);
                    if (nRet != 1)
                    {
                        baContent = null;	// 但是为空包
                    }



                    // 处理记录


                    string strMARC = DtlpChannel.GetDt1000LogRecord(baContent, encoding);

                    string strOperCode = "";
                    string strOperComment = "";
                    string strOperPath = "";

                    nRet = DtlpChannel.ParseDt1000LogRecord(strMARC,
                        out strOperCode,
                        out strOperComment,
                        out strOperPath,
                        out strError);
                    if (nRet == -1)
                    {
                        strOperComment = strError;
                    }

                    LogItemInfo info = new LogItemInfo();
                    info.Index = i;
                    info.Offset = GetStartOffs(strOffset);
                    info.OriginData = baContent;
                    info.Encoding = encoding;

                    ListViewItem item = new ListViewItem();
                    item.Text = i.ToString();
                    item.SubItems.Add(info.Offset);
                    item.SubItems.Add(strOperComment);
                    item.SubItems.Add(strOperPath);
                    item.Tag = info;

                    this.listView_records.Items.Add(item);

                    // 将日志记录路径解析为日期、序号、偏移
                    // 一个日志记录路径的例子为:
                    // /ip/log/19991231/0@1234~5678
                    // parameters:
                    //		strLogPath		待解析的日志记录路径
                    //		strDate			解析出的日期
                    //		nRecID			解析出的记录号
                    //		strOffset		解析出的记录偏移,例如1234~5678
                    // return:
                    //		-1		出错
                    //		0		正确
                    nRet = DtlpChannel.ParseLogPath(strNextPath,
                        out strDate,
                        out nRecID,
                        out strOffset,
                        out strError);
                    if (nRet == -1)
                        return -1;

                    // ModiOffset(ref strOffset);

                    bFirst = false;
                }


                return 1;   // 日志文件存在,已获得了记录

            }
            finally
            {
                stop.EndLoop();
                stop.OnStop -= new StopEventHandler(this.DoStop);
                stop.Initial("");
            }
        }
Beispiel #14
0
        // 编辑配置文件
        void menuItem_editCfgFile_Click(object sender, EventArgs e)
        {
            string strError   = "";
            string strContent = "";

            if (this.SelectedNode == null)
            {
                strError = "尚未选择要编辑的配置文件节点";
                goto ERROR1;
            }

            if (this.SelectedNode.ImageIndex != OFFS_CFGFILE)
            {
                strError = "所选择的节点不是配置文件类型";
                goto ERROR1;
            }

            string strPath = GetPath(this.SelectedNode, '/');

            if (Channel == null)
            {
                Channel = channelarray.CreateChannel(0);
            }

            Debug.Assert(Channel != null, "channel尚未初始化");

            Cursor.Current = Cursors.WaitCursor;
            int nRet = Channel.GetCfgFile(strPath,
                                          out strContent,
                                          out strError);

            Cursor.Current = Cursors.Default;

            if (nRet == -1)
            {
                goto ERROR1;
            }

            EditCfgForm dlg = new EditCfgForm();

            dlg.StartPosition = FormStartPosition.CenterScreen;
            dlg.CfgPath       = strPath;
            dlg.Content       = strContent;
            dlg.ShowDialog(this);

            if (dlg.DialogResult != DialogResult.OK)
            {
                return;
            }

            if (dlg.Changed == false)
            {
                return;
            }

            // 保存到(服务器端)配置文件
            // return:
            //      -1  出错
            //      0   成功
            Cursor.Current = Cursors.WaitCursor;
            nRet           = Channel.WriteCfgFile(dlg.CfgPath,
                                                  dlg.Content,
                                                  out strError);
            Cursor.Current = Cursors.Default;
            if (nRet == -1)
            {
                goto ERROR1;
            }

            MessageBox.Show(this, "配置文件 '" + dlg.CfgPath + "' 保存成功");
            return;

ERROR1:
            MessageBox.Show(this, strError);
        }
Beispiel #15
0
        private void DtlpSearchForm_Load(object sender, EventArgs e)
        {
            EventLoadFinish.Reset();

            this.BinDir = Environment.CurrentDirectory;

#if NO
            stop = new DigitalPlatform.Stop();
            stop.Register(MainForm.stopManager, true);	// 和容器关联
#endif

            // 初始化ChannelArray
            DtlpChannels.appInfo = MainForm.AppInfo;
            DtlpChannels.AskAccountInfo += new AskDtlpAccountInfoEventHandle(channelArray_AskAccountInfo);
            /*
            channelArray.procAskAccountInfo = new Delegate_AskAccountInfo(
                this.AskAccountInfo);
             * */

            // 准备唯一的通道
            if (this.DtlpChannel == null)
            {
                this.DtlpChannel = DtlpChannels.CreateChannel(0);
            }

            this.dtlpResDirControl1.channelarray = DtlpChannels;
            dtlpResDirControl1.Channel = this.DtlpChannel;
            dtlpResDirControl1.Stop = this.stop;

            /*
            dtlpResDirControl1.procItemSelected = new Delegate_ItemSelected(
                this.ItemSelected);
            dtlpResDirControl1.procItemText = new Delegate_ItemText(
                this.ItemText);
             * */
            dtlpResDirControl1.FillSub(null);

            /*
             * 需要异步执行,避免窗口长时间打不开
            string strLastTargetPath = MainForm.applicationInfo.GetString(
                "dtlpsearchform",
                "last_targetpath",
                "");
            if (String.IsNullOrEmpty(strLastTargetPath) == false)
            {
                this.dtlpResDirControl1.SelectedPath = strLastTargetPath;
            }*/

            // 按照上次保存的路径展开resdircontrol树
            string strResDirPath = this.MainForm.AppInfo.GetString(
                "dtlpsearchform",
                "last_targetpath",
                "");
            if (String.IsNullOrEmpty(strResDirPath) == false)
            {
                object[] pList = { strResDirPath };

                this.BeginInvoke(new Delegate_ExpandResDir(ExpandResDir),
                    pList);
            }
            else
            {
                this.EventLoadFinish.Set();
            }

            string strQueryWord = MainForm.AppInfo.GetString(
                "dtlpsearchform",
                "query_content",
                "");
            this.textBox_queryWord.Text = strQueryWord;

            API.PostMessage(this.Handle, WM_LOADSIZE, 0, 0);
        }
Beispiel #16
0
        // 校准转出范围的首尾号
        // return:
        //		-1	出错
        //		0	没有改变首尾号
        //		1	校准后改变了首尾号
        //		2	书目库中没有记录
        public int VerifyRange(out string strError)
        {
            strError = "";

            string strPath;

            byte[] baPackage;

            string strMinNumber;
            string strMaxNumber;
            int    nRet;
            int    style = DtlpChannel.JH_STYLE;
            int    nErrorNo;

            bool   bChanged = false;
            string strVersion;

            if (this.channel == null)
            {
                this.channel = this.Channels.CreateChannel(0);
            }

            Debug.Assert(m_strStartNumber != "",
                         "m_strStartNumber值不能为空");
            Debug.Assert(m_strEndNumber != "",
                         "m_strEndNumber值不能为空");

            // 校准最大号
            //REDO1:
            strPath = m_strDBPath;

            // GetDTLPVersion(m_strDBPath, strVersion);	// 可以将库名再去除,效果更好
            strVersion = "0.9";

            if (strVersion == "0.9")
            {
                strPath += "/ctlno/9999999";                    // 7位
            }
            else
            {
                strPath += "/ctlno/9999999999";                 // 10位
            }
            nRet = channel.Search(strPath,
                                  style | DtlpChannel.PREV_RECORD,
                                  out baPackage);
            if (nRet <= 0)
            {
                nErrorNo     = channel.GetLastErrno();
                this.ErrorNo = nErrorNo;

                if (nErrorNo == DtlpChannel.GL_NOTEXIST)
                {
                    return(2);
                }

                if (nErrorNo == DtlpChannel.GL_INVALIDCHANNEL)
                {
                    this.channel = null;
                }

                /*
                 *              channel.ErrorBox(owner,
                 *  "dp1Batch",
                 *  "校准最大号时发生错误\nSearch() style=PREV_RECORD error");
                 * */
                strError = "校准最大号时发生错误\nSearch() style=PREV_RECORD error: \r\n" + channel.GetErrorDescription();
                goto ERROR1;
            }

            ///
            Package package = new Package();

            package.LoadPackage(baPackage, channel.GetPathEncoding(strPath));
            nRet = package.Parse(PackageFormat.Binary);
            if (nRet == -1)
            {
                strError = "Package::Parse(PackageFormat.Binary) error";
                Debug.Assert(false, strError);
                goto ERROR1;
            }

            strPath = package.GetFirstPath();

            nRet = GetCtlNoFromPath(strPath,
                                    out strMaxNumber);
            if (nRet == -1)
            {
                strError = "GetCtlNoFromPath() error ...";
                Debug.Assert(false, strError);
                goto ERROR1;
            }

            // 2007/8/18
            if (strVersion == "0.9")
            {
                strMaxNumber = strMaxNumber.PadLeft(7, '0');    // 7位
            }
            else
            {
                strMaxNumber = strMaxNumber.PadLeft(10, '0');   // 10位
            }
            if (Convert.ToInt64(m_strStartNumber) <= Convert.ToInt64(m_strEndNumber))
            {
                if (Convert.ToInt64(m_strEndNumber) > Convert.ToInt64(strMaxNumber))
                {
                    m_strEndNumber = strMaxNumber;
                    bChanged       = true;
                }
            }
            else
            {
                if (Convert.ToInt64(m_strStartNumber) > Convert.ToInt64(strMaxNumber))
                {
                    m_strStartNumber = strMaxNumber;
                    bChanged         = true;
                }
            }


            // 校准最小号
            //REDO2:
            strPath  = m_strDBPath;
            strPath += "/ctlno/0000000000";             // -

            nRet = channel.Search(strPath,
                                  style | DtlpChannel.NEXT_RECORD,
                                  out baPackage);
            if (nRet <= 0)
            {
                nErrorNo = channel.GetLastErrno();

                this.ErrorNo = nErrorNo;

                if (nErrorNo == DtlpChannel.GL_NOTEXIST)
                {
                    return(2);
                }
                if (nErrorNo == DtlpChannel.GL_INVALIDCHANNEL)
                {
                    this.channel = null;
                }

                /*
                 *              channel.ErrorBox(owner,
                 *                      "Batch",
                 *                      "校准最小号时发生错误\nSearch() style=NEXT_RECORD error");
                 * */
                strError = "校准最小号时发生错误\nSearch() style=NEXT_RECORD error: \r\n" + channel.GetErrorDescription();
                goto ERROR1;
            }

            ///
            package.LoadPackage(baPackage, channel.GetPathEncoding(strPath));
            nRet = package.Parse(PackageFormat.Binary);
            if (nRet == -1)
            {
                strError = "Package::Parse(PackageFormat.Binary) error";
                Debug.Assert(false, strError);
                goto ERROR1;
            }

            strPath = package.GetFirstPath();

            nRet = GetCtlNoFromPath(strPath,
                                    out strMinNumber);
            if (nRet == -1)
            {
                strError = "GetCtlNoFromPath() error ...";
                Debug.Assert(false, strError);
                goto ERROR1;
            }

            // 2007/8/18
            if (strVersion == "0.9")
            {
                strMinNumber = strMinNumber.PadLeft(7, '0');    // 7位
            }
            else
            {
                strMinNumber = strMinNumber.PadLeft(10, '0');   // 10位
            }
            if (Convert.ToInt64(m_strStartNumber) <= Convert.ToInt64(m_strEndNumber))
            {
                if (Convert.ToInt64(m_strStartNumber) < Convert.ToInt64(strMinNumber))
                {
                    m_strStartNumber = strMinNumber;
                    bChanged         = true;
                }
            }
            else
            {
                if (Convert.ToInt64(m_strEndNumber) < Convert.ToInt64(strMinNumber))
                {
                    m_strEndNumber = strMinNumber;
                    bChanged       = true;
                }
            }

            if (bChanged == true)
            {
                return(1);
            }
            else
            {
                return(0);
            }

ERROR1:
            return(-1);
        }
Beispiel #17
0
 public bool DestroyChannel(DtlpChannel channel)
 {
     channel.Cancel();
     this.Remove(channel);
     return(true);
 }
Beispiel #18
0
        // strStart, // 起始路径, ""表示根
        Package GetOneLevelDirPackage(string strStart)
        {
            int nRet;

            byte [] baPackage = null;

            // bool bSetDefault = false;	// 表示是否使用过缺省帐户

            //bool bFirstLogin = true;

            Package package = new Package();

            // CWaitCursor cursor;
            if (Channel == null)
            {
                Channel = channelarray.CreateChannel(0);
            }

            Debug.Assert(Channel != null, "channel尚未初始化");

            Cursor.Current = Cursors.WaitCursor;
            if (Stop != null)
            {
                Stop.OnStop += new StopEventHandler(this.DoStop);
                Stop.SetMessage("正在列目录 '" + strStart + "' ...");
                Stop.BeginLoop();
            }
            try
            {
                nRet = Channel.Dir(strStart,
                                   out baPackage);
            }
            finally
            {
                if (Stop != null)
                {
                    Stop.EndLoop();
                    Stop.OnStop -= new StopEventHandler(this.DoStop);
                    Stop.Initial("");
                }

                Cursor.Current = Cursors.Default;
            }

            if (nRet == -1)
            {
                Channel.ErrorBox(this,
                                 "restree",
                                 "列目录发生错误");

                goto ERROR1;
            }


            package.LoadPackage(baPackage, Channel.GetPathEncoding(strStart));
            package.Parse(PackageFormat.String);

            return(package);

ERROR1:
            return(null);
        }
Beispiel #19
0
		public bool DestroyChannel(DtlpChannel channel)
		{
			channel.Cancel();
			this.Remove(channel);
			return true;
		}
Beispiel #20
0
		// 校准转出范围的首尾号
		// return:
		//		-1	出错
		//		0	没有改变首尾号
		//		1	校准后改变了首尾号
		//		2	书目库中没有记录
		public int VerifyRange(out string strError)
		{
            strError = "";

			string strPath;
			byte[] baPackage;

			string strMinNumber;
			string strMaxNumber;
			int nRet;
			int style = DtlpChannel.JH_STYLE;
			int nErrorNo;

			bool bChanged = false;
			string strVersion;

            if (this.channel == null)
                this.channel = this.Channels.CreateChannel(0);

			Debug.Assert(m_strStartNumber != "",
				"m_strStartNumber值不能为空");
			Debug.Assert(m_strEndNumber != "",
				"m_strEndNumber值不能为空");

			// 校准最大号
			//REDO1:
				strPath = m_strDBPath;

			// GetDTLPVersion(m_strDBPath, strVersion);	// 可以将库名再去除,效果更好
			strVersion = "0.9";

			if (strVersion == "0.9")
				strPath += "/ctlno/9999999";	// 7位
			else
				strPath += "/ctlno/9999999999";	// 10位

			nRet = channel.Search(strPath,
				style | DtlpChannel.PREV_RECORD,
				out baPackage);
			if (nRet <= 0) 
			{
				nErrorNo  = channel.GetLastErrno();
				this.ErrorNo = nErrorNo;

				if (nErrorNo == DtlpChannel.GL_NOTEXIST)
					return 2;

				if (nErrorNo == DtlpChannel.GL_INVALIDCHANNEL)
					this.channel = null;

                /*
				channel.ErrorBox(owner,
                    "dp1Batch",
                    "校准最大号时发生错误\nSearch() style=PREV_RECORD error");
                 * */
                strError = "校准最大号时发生错误\nSearch() style=PREV_RECORD error: \r\n" + channel.GetErrorDescription();
				goto ERROR1;
			}

			/// 
			Package package = new Package();

			package.LoadPackage(baPackage, channel.GetPathEncoding(strPath));
			nRet = package.Parse(PackageFormat.Binary);
			if (nRet == -1) 
			{
                strError = "Package::Parse(PackageFormat.Binary) error";
				Debug.Assert(false, strError);
				goto ERROR1;
			}

			strPath = package.GetFirstPath();

			nRet = GetCtlNoFromPath(strPath,
				out strMaxNumber);
			if (nRet == -1) 
			{
                strError = "GetCtlNoFromPath() error ...";
				Debug.Assert(false, strError);
				goto ERROR1;
			}

            // 2007/8/18
            if (strVersion == "0.9")
                strMaxNumber = strMaxNumber.PadLeft(7, '0');	// 7位
            else
                strMaxNumber = strMaxNumber.PadLeft(10, '0');	// 10位


			if (Convert.ToInt64(m_strStartNumber) <= Convert.ToInt64(m_strEndNumber)) 
			{
				if (Convert.ToInt64(m_strEndNumber) > Convert.ToInt64(strMaxNumber)) 
				{
					m_strEndNumber = strMaxNumber;
					bChanged = true;
				}
			}
			else 
			{
				if (Convert.ToInt64(m_strStartNumber) > Convert.ToInt64(strMaxNumber)) 
				{
					m_strStartNumber = strMaxNumber;
					bChanged = true;
				}
			}


			// 校准最小号
			//REDO2:
				strPath = m_strDBPath;
			strPath += "/ctlno/0000000000";	// -

			nRet = channel.Search(strPath,
				style | DtlpChannel.NEXT_RECORD,
				out baPackage);
			if (nRet <= 0) 
			{
				nErrorNo = channel.GetLastErrno();

				this.ErrorNo = nErrorNo;

				if (nErrorNo == DtlpChannel.GL_NOTEXIST)
					return 2;
				if (nErrorNo == DtlpChannel.GL_INVALIDCHANNEL)
					this.channel = null;

                /*
				channel.ErrorBox(owner,
					"Batch",
					"校准最小号时发生错误\nSearch() style=NEXT_RECORD error");
                 * */
                strError = "校准最小号时发生错误\nSearch() style=NEXT_RECORD error: \r\n" + channel.GetErrorDescription();
				goto ERROR1;

			}

			/// 
			package.LoadPackage(baPackage, channel.GetPathEncoding(strPath));
			nRet = package.Parse(PackageFormat.Binary);
			if (nRet == -1) 
			{
                strError = "Package::Parse(PackageFormat.Binary) error";
				Debug.Assert(false, strError);
				goto ERROR1;
			}

			strPath = package.GetFirstPath();

			nRet = GetCtlNoFromPath(strPath,
				out strMinNumber);
			if (nRet == -1) 
			{
                strError = "GetCtlNoFromPath() error ...";
				Debug.Assert(false, strError);
				goto ERROR1;
			}

            // 2007/8/18
            if (strVersion == "0.9")
                strMinNumber = strMinNumber.PadLeft(7, '0');	// 7位
            else
                strMinNumber = strMinNumber.PadLeft(10, '0');	// 10位


			if (Convert.ToInt64(m_strStartNumber) <= Convert.ToInt64(m_strEndNumber)) 
			{
				if (Convert.ToInt64(m_strStartNumber) < Convert.ToInt64(strMinNumber)) 
				{
					m_strStartNumber = strMinNumber;
					bChanged = true;
				}
			}
			else 
			{
				if (Convert.ToInt64(m_strEndNumber) < Convert.ToInt64(strMinNumber)) 
				{
					m_strEndNumber = strMinNumber;
					bChanged = true;
				}
			}

			if (bChanged == true)
				return 1;
			else
				return 0;

			ERROR1:
				return -1;
		}
Beispiel #21
0
		// 创建一个新通道
		public DtlpChannel CreateChannel(int usrid)
		{
			DtlpChannel channel = new DtlpChannel();

			channel.Container = this;
			channel.m_lUsrID = usrid;
			channel.InitialHostArray();
	
			this.Add(channel);

			return channel;
		}
Beispiel #22
0
		// 得到下一条记录
		// return:
		//		-1	出错
		//		0	继续
		//		1	到达末尾(超过m_strEndNumber)
		//		2	没有找到记录
		public int NextRecord(ref int nRecCount,
            out string strError)
		{
            strError = "";

			string strPath;
			string strNumber;
			string strNextNumber;
			byte[] baPackage = null;
		
			int nSearchStyle = DtlpChannel.XX_STYLE;
			int nRet;
			int nErrorNo;
			int nDirStyle = 0;	// 方向风格
			byte[] baMARC = null;

            if (this.channel == null)
                this.channel = this.Channels.CreateChannel(0);

			Debug.Assert(m_strStartNumber != "",
				"m_strStartNumber值不能为空");
			Debug.Assert(m_strEndNumber != "",
				"m_strEndNumber值不能为空");

			// 首次进入本函数
			if (nRecCount == -1) 
			{
				strNumber = m_strStartNumber;

				nDirStyle = 0;
				nRecCount = 0;
			}
			else 
			{
				strNumber = m_strNextNumber;

				if (Convert.ToInt64(m_strStartNumber) <= Convert.ToInt64(m_strEndNumber)) 
				{
					nDirStyle = DtlpChannel.NEXT_RECORD;
					if (Convert.ToInt64(strNumber) >= Convert.ToInt64(m_strEndNumber))
						return 1;	// 结束
				}
				else 
				{
					nDirStyle = DtlpChannel.PREV_RECORD;
					if (Convert.ToInt64(strNumber) <= Convert.ToInt64(m_strEndNumber))
						return 1;	// 结束
				}
			}


			strPath = m_strDBPath;
			strPath += "/ctlno/";
			strPath += strNumber;

	//		REDO:
				nRet = channel.Search(strPath,
					nSearchStyle | nDirStyle,
					out baPackage);
			if (nRet == -1) 
			{
				nErrorNo  = channel.GetLastErrno();
				if (nErrorNo == DtlpChannel.GL_NOTLOGIN) 
				{
					// 重新登录的事情,已经被Search()接管了
				}
				else 
				{
					if (nErrorNo == DtlpChannel.GL_NOTEXIST) 
					{
						// 增量号码
						Int64 n64Number = Convert.ToInt64(strNumber);
						string strVersion;

						// GetDTLPVersion(m_strDBPath, strVersion);	// 可以将库名再去除,效果更好
						strVersion = "0.9";
				
						if (n64Number+1<9999999
							&& strVersion == "0.9") 
						{
							//strNumber.Format(_T("%I0764d"), n64Number+1);
							// 确保7位数字
							strNumber = String.Format("{0:D7}", n64Number+1);   // "{0,7:D}" BUG!!! 左边实际上是空格 2009/2/26
						}
						else 
						{
							// strNumber.Format(_T("%I64d"), n64Number+1);
                            strNumber = String.Format("{0:D7}", n64Number + 1);  // "{0,7:D}" BUG!!! 左边实际上是空格 2009/2/26
						}


						m_strCurNumber = strNumber;
						goto NOTFOUND;
					}

					this.ErrorNo = nErrorNo;

					if (nErrorNo == DtlpChannel.GL_INVALIDCHANNEL)
						this.channel = null;

					// 得到字符串即可
                    /*
					channel.ErrorBox(owner, "DtlpIO",
						"检索发生错误\nSearch() error");
                     * */
                    strError = "检索发生错误\nSearch() error: \r\n" + channel.GetErrorDescription();
					goto ERROR1;
				}

				m_strPath = strPath;
	
				goto ERROR1;
			}


			/// 
			Package package = new Package();

			package.LoadPackage(baPackage, channel.GetPathEncoding(strPath));
			nRet = package.Parse(PackageFormat.Binary);
			if (nRet == -1) 
			{
				Debug.Assert(false, "Package::Parse() error");
                strError = "Package::Parse() error";
				goto ERROR1;
			}

			nRet = package.GetFirstBin(out baMARC);
			if (nRet == -1 || nRet == 0) 
			{
				Debug.Assert(false, "Package::GetFirstBin() error");
                strError = "Package::GetFirstBin() error";
				goto ERROR1;
			}

			if (baMARC.Length >= 9) 
			{
				Array.Copy(baMARC, 0, m_baTimeStamp, 0, 9);

				byte [] baBody = new byte[baMARC.Length - 9];
				Array.Copy(baMARC, 9, baBody, 0, baMARC.Length - 9);
				baMARC = baBody;

				//baMARC.RemoveAt(0, 9);	// 时间戳
			}
			else 
			{
				// 记录有问题,放入一个空记录?
			}

			// ---????????? 编写一个在byte[]末尾追加东西的函数?

			// baMARC = ByteArray.Add(baMARC, (byte)0);
			// baMARC.Add(0);
			// baMARC.Add(0);

			m_strRecord = channel.GetPathEncoding(strPath).GetString(baMARC);

			strPath = package.GetFirstPath();

			nRet = GetCtlNoFromPath(strPath,
				out strNextNumber);
			if (nRet == -1) 
			{
				Debug.Assert(false, "GetCtlNoFromPath() return error ...");
				strError = "GetCtlNoFromPath() error ...";
				goto ERROR1;
			}

			m_strNextNumber = strNextNumber;

			if (nRecCount == 0)	// 首次
				m_strCurNumber = strNumber;
			else
				m_strCurNumber = strNextNumber;

			m_strPath = strPath;	//

			nRecCount ++;
			return 0;
			ERROR1:
				return -1;
			NOTFOUND:
				return 2;
		}
Beispiel #23
0
        // 获得日志记录
        // return:
        //      -1  出错
        //      0   日志文件不存在
        //      1   日志文件存在
        int GetLogRecords(string strServerAddr,
                          string strLogFileName,
                          out string strError)
        {
            strError = "";
            int nStartIndex = 0;

            stop.OnStop += new StopEventHandler(this.DoStop);
            stop.SetMessage("正在从服务器获得日志记录 ...");
            stop.BeginLoop();

            this.Update();
            this.MainForm.Update();

            try
            {
                string strPath = strServerAddr + "/log/" + strLogFileName + "/" + nStartIndex.ToString();

                bool bFirst = true;

                string strDate   = "";
                int    nRecID    = -1;
                string strOffset = "";

                int nStyle = 0;

                for (int i = nStartIndex; ; i++)
                {
                    Application.DoEvents();     // 出让界面控制权

                    if (stop != null)
                    {
                        if (stop.State != 0)
                        {
                            strError = "用户中断";
                            return(-1);
                        }
                    }

                    byte[] baPackage = null;

                    if (bFirst == true)
                    {
                    }
                    else
                    {
                        strPath = strServerAddr + "/log/" + strDate /*strLogFileName*/ + "/" + nRecID.ToString() + "@" + strOffset;
                    }

                    Encoding encoding = this.Channel.GetPathEncoding(strPath);

                    stop.SetMessage("正在获得日志记录 " + strPath);

                    int nRet = this.Channel.Search(strPath,
                                                   DtlpChannel.RIZHI_STYLE | nStyle,
                                                   out baPackage);
                    if (nRet == -1)
                    {
                        int errorcode = this.Channel.GetLastErrno();
                        if (errorcode == DtlpChannel.GL_NOTEXIST)
                        {
                            if (bFirst == true)
                            {
                                break;
                            }
                        }

                        // 更换新通道
                        if (errorcode == DtlpChannel.GL_INTR ||
                            errorcode == DtlpChannel.GL_SEND ||
                            errorcode == DtlpChannel.GL_RECV)
                        {
                            this.Channel = channelArray.CreateChannel(0);
                        }

                        strError = "获取日志记录:\r\n"
                                   + "路径: " + strPath + "\r\n"
                                   + "错误码: " + errorcode + "\r\n"
                                   + "错误信息: " + this.Channel.GetErrorString(errorcode) + "\r\n";
                        return(-1);
                    }


                    // 解析出记录
                    Package package = new Package();
                    package.LoadPackage(baPackage,
                                        encoding);
                    package.Parse(PackageFormat.Binary);

                    // 获得下一路径
                    string strNextPath = "";
                    strNextPath = package.GetFirstPath();
                    if (String.IsNullOrEmpty(strNextPath) == true)
                    {
                        if (this.checkBox_loop.Checked == true)
                        {
                            i--;
                            continue;
                        }

                        if (bFirst == true)
                        {
                            strError = "文件 " + strLogFileName + "不存在";
                            return(0);
                        }
                        // strError = "检索 '" + strPath + "' 响应包中路径部分不存在 ...";
                        // return -1;
                        break;
                    }

                    // 获得记录内容
                    byte[] baContent = null;
                    nRet = package.GetFirstBin(out baContent);
                    if (nRet != 1)
                    {
                        baContent = null;       // 但是为空包
                    }



                    // 处理记录


                    string strMARC = DtlpChannel.GetDt1000LogRecord(baContent, encoding);

                    string strOperCode    = "";
                    string strOperComment = "";
                    string strOperPath    = "";

                    nRet = DtlpChannel.ParseDt1000LogRecord(strMARC,
                                                            out strOperCode,
                                                            out strOperComment,
                                                            out strOperPath,
                                                            out strError);
                    if (nRet == -1)
                    {
                        strOperComment = strError;
                    }

                    LogItemInfo info = new LogItemInfo();
                    info.Index      = i;
                    info.Offset     = GetStartOffs(strOffset);
                    info.OriginData = baContent;
                    info.Encoding   = encoding;

                    ListViewItem item = new ListViewItem();
                    item.Text = i.ToString();
                    item.SubItems.Add(info.Offset);
                    item.SubItems.Add(strOperComment);
                    item.SubItems.Add(strOperPath);
                    item.Tag = info;

                    this.listView_records.Items.Add(item);

                    // 将日志记录路径解析为日期、序号、偏移
                    // 一个日志记录路径的例子为:
                    // /ip/log/19991231/0@1234~5678
                    // parameters:
                    //		strLogPath		待解析的日志记录路径
                    //		strDate			解析出的日期
                    //		nRecID			解析出的记录号
                    //		strOffset		解析出的记录偏移,例如1234~5678
                    // return:
                    //		-1		出错
                    //		0		正确
                    nRet = DtlpChannel.ParseLogPath(strNextPath,
                                                    out strDate,
                                                    out nRecID,
                                                    out strOffset,
                                                    out strError);
                    if (nRet == -1)
                    {
                        return(-1);
                    }

                    // ModiOffset(ref strOffset);

                    bFirst = false;
                }


                return(1);   // 日志文件存在,已获得了记录
            }
            finally
            {
                stop.EndLoop();
                stop.OnStop -= new StopEventHandler(this.DoStop);
                stop.Initial("");
            }
        }