用C++实现文件夹同步

来源 :电脑知识与技术 | 被引量 : 0次 | 上传用户:fenglingxing
下载到本地 , 更方便阅读
声明 : 本文档内容版权归属内容提供方 , 如果您对本文有版权争议 , 可与客服联系进行内容授权或下架
论文部分内容阅读
  摘要:所谓的文件夹同步,也叫实时备份,就是保持目标文件夹中的文件随时和源文件中的文件完全一致。要实现同步,程序就必须随时知道源文件夹中的文件是否发生了变化。那么该功能是如何实现的呢?本文给出了实现的方法(API函数)和原理,同时用一个C++ Builder中的实例来证明问题。
  关键词:文件夹同步;备份;C++ Builder;监控;进程;函数
  中图分类号:TP311.1文献标识码:A文章编号:1009-3044(2007)05-11302-01
  
  1编程思路
  对于文件夹同步功能不同的软件采取不同的实现方法。一些软件采用定时备份的策略来避开这个难题,不管源文件是否已经变化,只有到了指定的时间间隔,才检查源文件夹和目标文件夹是否一致,而比较专业的软件则能够在源文件夹发生任何变化时马上截获这种变化并采取措施使目标文件夹中的文件更新。显然,后一种方法更可靠。那么,当源文件夹中的文件发生变化时,程序如何才能马上知道呢?用定时器当然是不可能的。下面,就将在C++ Builder的实现方法介绍如下:
  很多人都知道如何实现在一个进程结束前一直等待的方法。因为Windows是一个多任务系统,所以如果我们在程序中创造一个进程并执行,那么不论进程是否执行完毕,我们的程序都会马上返回。典型的例子就是我们在程序中通过WinExc()函数执行一个Dos程序,即使这个Dos程序还在运行,我们的程序也会继续执行下面的语句。还可以找到的例子就是批处理文件执行的效果。如果想要让程序等到外部进程结束才继续运行,就要用Wait For Sing Object()函数循环监视进程的执行情况,直到发现进程已经结束再退出循环,继续下面的语句。而监视文件夹是否发生变化的原理也是采用了这种方法。系统会为我们创造进程,只有当文件夹发生变化时这个进程才能退出,只有里程退出,我们的程序才继续运行,并调用同步文件夹的自定义函数Tong Bu(),然后,再继续循环监视这个进程……
  不同的是,这个进程不是由我们创建并招待的,而是系统创建并招待的。要创建这个进程,就必须调用API函数Find First Change Notification()以及Find Next Change Notification()。事实上,当我们调用第一个API函数,系统就会创建一个进程并返回在这个进程的句柄,这个进程在不停的运行,直到指定的文件夹发生变化时才退出。而我们就可以通过循环调用Wait For Single Object()函数监视这个进程是否退出(进程退出后这个函数返回),从而知道文件夹是否已经发生变化。
  当文件夹发生变化,这个系统创建的过程就会退出,这时调用Tong Bu()函数检查源文件夹已经变化的文件并更新目标文件夹。然后,当然必须继续监视文件夹的变化,而系统刚刚创建的进程已经退出,我们必须再次让系统创建这个进程。这时有两个选择:一个就是再次调用Find First Change Notification()函数,重新创建进程对指定的文件夹进行监视。另一个就是调用函数Find Next Change Notification()函数,直接创建进程对上次那个文件夹进行监视。如果使用第一种方法的话,必须首先关闭上一次创建进程进行的监视,调用函数Find First Change Notification()即可。所以从简单性考虑,还是使用第二方法。不过,无论哪种方法,在不需要监视时都必须调用函数Find Close Change Notification()关闭监视。
  这样可以在一个循环中不停地创建进程、监视进程、变化后同步、再次创建进程、监视进程、变化后同步……但是一定要设置条件可以退出循环,比如一个逻辑变量指示,否则该软件就会“死路一条”!而且,循环中一定要将系统及当前窗体的消息传出去。否则,系统除了运行这个软件,什么也干不了啦,可以使用Application→Process Messages()将消息传出去。
  
  2 示例程序
  下面是一个简单的文件夹同步的示例程序。这个程序在文件夹同步函数Tong Bu()中,简单地将源文件夹中所有的文件拷贝到目标文件夹中覆盖目标文件,并不是很好的解决方案,实际上应该检测源文件夹与目标文件夹不同的文件,只拷贝这些文件即可,但这是一个示例程序(注:以下程序在C++ Builder中调试通过)。
  本程序在主窗体Form1中包含两组Group Box,每组包含一个Drive Com box和一个Directory List Box,分别用来指定源文件夹和目标文件夹,另外还有两个File List Box用来显示源文件夹和目标文件夹中的文件列表。上面这些组件通过相应的属性设置联系在一起,使改变驱动器时文件夹自动变化,根本不用编写一行代码,这就是C++ Builder让我们着迷的地方,当然具体的设置方法我就不再赘述了。
  至于两个按钮,Bit Btn1和Bit Btn2的作用是:Bit Btn2是用来退出的,而Bit Btn1则是用来开始和停止文件夹变化监控的。如果正在监控,那么单击一下就停止监控,否则单击一下就开始监控。我们用一个逻辑变量Start Flag标识目前的监控状态。
  各个API函数在源代码中说明其用法。下面的源代码为了节省篇幅,省略了自动生成的部分。
  本文中所涉及到的图表、注解、公式等内容请以PDF格式阅读原文。
  参考文献:
  [1]谢敏.应用C++ Builder实现实时数据采集、显示的方法[J].电子工程师.(32,1).
  [2]茜西.文件夹同步好帮手JFileSyn[J].计算机文摘. 2005,(8).
  [3]朱时银.C++ Builder5.0编程实例与技巧[M].北京:机械工业出版社,2001.
  [4]张晓东. C++ Builder5程序设计[M].北京:中国铁道出版社,2002.
  [5](美)Ken Getz Mike Gilbert.VBA高级开发指南[M].北京:电子工业出版社,1997.
  [6]刘森林.一种基于C++ Builder的过程控制系统设计与实现[J].东南大学学报,2003,9(33):158-161.
其他文献
摘要:贪食蛇游戏是款简单有趣的游戏。此文以Authorware7.0为开发工具,介绍了如何利用Authorware7.0中的函数变量实现贪食蛇游戏,涉及到界面设计、事件响应、时间限制以及声音设置等。  关键词:贪食蛇游戏;Authorware;函数;变量  中图分类号:TP311文献标识码:A文章编号:1009-3044(2007)05-11288-02    1 系统设计  1.1 本系统功能 
期刊
摘要:通过分析电子病历数据来源,针对数据来源的多样性,利用XML可以对不同应用甚至是差异很大的应用间的数据进行描述的优点,设计出基于XML的电子病历集成框架,将来源于不同应用系统的病历数据转换为XML文档以实现数据的共享与交换。  关键词:电子病历;CPR;XML;信息集成  中图分类号:TP312文献标识码:A 文章编号:1009-3044(2007)05-11277-02    1 引言  医
期刊
摘要:AutoCAD在工程界得到了广泛的应用,学习和掌握AutoCAD也逐渐地成为工程设计人员必备的技能之一。本文主要介绍AutoCAD软件的一些辅助命令及绘图技巧,提高工程制图的效率,促进工程界的甩图板进程。  关键词:CAD;AutoCAD;绘图技巧;模板文件  中图分类号:TP391文献标识码:A文章编号:1009-3044(2007)05-11286-02    1 引言  计算机辅助设计
期刊
摘要:网络应用正从面向对象的架构向面向服务的架构方向转变,基于Web服务架构的开发模型顺应了从组件复用向服务复用转变这一未来软件发展的新趋势。本文以服务技术的发展应用为基础,探讨了.NET环境下的web服务开发,提出了基本实现思路。  关键词:Web服务;ASP.NET;.NET框架  中图分类号:TP311 文献标识码:A文章编号:1009-3044(2007)05-11262-02    1
期刊
摘要:本文就Internet蠕虫的传播模型进行了研究,分析了各种传播模型的特点和适用环境,在此基础上结合良性蠕虫的特点提出了良性蠕虫对抗恶性蠕虫的传播模型。经过比较和分析,理论上证明了蠕虫对抗蠕虫传播模型,有效地补充和改进了传统的Internet蠕虫传播模型,使其更符合Internet蠕虫传播的实际,为进一步研究蠕虫的检测与预防提供了有力的研究方法。与现有模型相比,其降低了对抗蠕虫给网络造成的冲击
期刊
摘要:构建房地产管理系统虚拟专用网是房地产管理部门信息化网络化的重要组成。IPsec VPN和SSL VPN是两种主流的VPN技术,各有优势和不足。通过对二者的对比分析和对实际需求的调查,研究探讨两种主流技术在VPN中的应用,这对于构建一个既符合实际要求又有扩展空间,并且性价比较高的VPN具有参考价值。  关键词:VPN;Ipsec;SSL;房地产管理  中图分类号:TP393.2文献标示码:A
期刊
摘要:本文将Java技术与XML技术进行有机结合,研究了数据库操作中,XML技术映射数据库中表与Java类的方法,通过Java技术动态解析XML映射,为操作数据库建立对象查询语句,并应用Java技术对对象查询语句转换为标准SQL语句提出了新的实现方法。  关键词:XML映射;对象查询;动态解析  中图分类号:TP311文献标识码:A 文章编号:1009-3044(2007)05-11273-01 
期刊
摘要:应用程序可能容易受到两类安全性威胁的攻击:静态和动态。虽然开发人员不能完全控制动态威胁,但在开发应用程序时,可以采取一些预防措施来消除静态威胁。静态暴露是系统中的缺陷,使系统暴露在想要篡夺该系统的特权的攻击者面前。本文概括,解释了13种类型的静态暴露,并具体给出处理安全性暴露问题的一些建议。  关键词:安全性;暴露;Java  中图分类号: TP311文献标识码:A文章编号:1009-304
期刊
摘要:本文首先分析了移动IP技术在无线自组网络中的工作原理,然后探讨一种将自组网技术和移动IP技术融合的无线移动网络体系结构,并分析了其工作过程和服务性能。  关键词:自组网;移动IP;接入分析  中图分类号:TP393 文献标识码:A文章编号:1009-3044(2007)05-11267-02    1 引言  自组网络是分布式系统,无论是合法的网络用户还是恶意的入侵节点都可以接入无线信道,且
期刊
摘要: 决策树是一种有效的数据分类方法,它的构造方法很多。在这里,提出一种基于MMEPA(改进的最小熵原理方法)的决策树构造方法,并通过一个实例对其进行说明,用此方法提取分类规则,构造决策树模型。最后,对噪声剪枝等问题提出了解决思路。  关键词:分类;决策树;MMEPA(modified minimize entropy principle approach)  中图分类号:TP181 文献标识码
期刊