前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >非侵入式数据发掘

非侵入式数据发掘

原创
作者头像
谭广健
发布2022-04-16 11:53:28
4960
发布2022-04-16 11:53:28
举报
文章被收录于专栏:谭广健的专栏谭广健的专栏

一直都想写这篇文章,但一直不知道如何下手;刚好又完成一个非侵入式二开的项目,在这里就分享一下吧。首先这里的非侵入式是指在不改动原有的程序下对数据进行获取及显示。中国的程序员千千万万,写的程序也是如天上的繁星,而程序的质量也如三山五岳(三山:安徽黄山、江西庐山、浙江雁荡山。五岳:泰山、华山、衡山、嵩山、恒山)参差各异。这次项目其实说也简单,就是从串口中获取数据转为API,这个就是之前那篇《Firebird 火鸟数据库 +IIS+ 万金油 ASP》。难点在于其串口传来的数据分析,因为大概有5个类别23个串口数据;如果逐个去分析也够花时间的;于是就放弃直接从串口捞数的方式。好在它从串口取数后就直接写库,因此就有了刚才提及的那篇文章。一般都是这样先将获取的数据进行做数据集,然后再通过数据筛选及整理再展示。

就以为这样完结,NO,生活不会一帆风顺滴。又遇到一个问题就是因为ASP通过ODBC读数据库,是属于锁文件读取。就是不论对数据库是否写入,只要通过ODBC连的都一律锁文件(有点霸王),其他程序是无法读和写入;因此问题来了,一锁文件,串口的数据就无法写入;而当串口程序检测到无法写入就会立即删除,重建并将之前的数据全部抹掉。因此麻烦来了,不可能影响到它们的正常,后来想了一个办法就是自动把数据库文件复制到另一个目录,让ASP进行ODBC联这个目录里的数据库。这样就不怕担心它们之间的影响,就算影响也只是影响ASP的读数处理而已。权行后本来想用计划事务对复制数据库的批处理进行执行,但计划事务有没有找到合适的,于是也能自己写一个简单的定时文件执行的功能。

代码语言:javascript
复制
        /// <summary>
        /// 文件复制 
        /// </summary>
        private void Copy_file()
        {            
            string Filename = Path + @"\DATA.FDB",Newame = "";
            Computer computer = new Computer();
            try
            {
                if (File.Exists(Filename))//判断数据是否存在,存在改名 
                {
                    System.Random a = new Random(System.DateTime.Now.Millisecond);
                    int RandKey = a.Next(10);
                    Newame = RandKey + ".tak";
                    computer.FileSystem.RenameFile(Filename, Newame);
                }

                computer.FileSystem.CopyFile(Path + @"\..\..\DATA.FDB", Filename);//数据复制

                if (!string.IsNullOrEmpty(Newame))
                {
                    computer.FileSystem.DeleteFile(Path + @"\" + Newame);//删除改名的
                }
                in_data("传输成功");
                LogManager.WriteLog("==File_copy=ok=" + Newame + "|");
               
            }
            catch (IOException ex)
            {
                in_data("传输失败,详情请查看日志!");
                LogManager.WriteLog("==File_copy=error=" + ex.StackTrace + "|--->" + ex.Message);
            }
          
        }

上面的函数就是文件复制,思路就是先将原来的改名,然后再将文件复制过去,之后就把改名的删除。有同学可能会问,为什么要改名,不直接删除。刚才都说了因为ODBC是文件独占,所以删除不了,但可以改名。至于为什么可以改名,估计是ODBC会将文件放入缓存,当缓存跟文件有差别就更新吧(这个是我想的)。反正目前就是这样。

-完-

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
作者已关闭评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档