65.9K
CodeProject 正在变化。 阅读更多。
Home

实时文件夹同步 Windows 服务

starIconstarIconstarIcon
emptyStarIcon
starIcon
emptyStarIcon

3.92/5 (8投票s)

2009 年 4 月 23 日

CPOL

2分钟阅读

viewsIcon

127764

downloadIcon

9445

一个 Windows 服务,可以将文件在域之间复制和删除,以保持两个文件夹同步

引言

FileSyncService 是一个窗口服务,可以跨域复制和删除文件,以保持 2 个文件夹实时同步。
如果您需要同步 2 个 Windows 文件夹,并且它们都在 Windows 系统中,此服务将满足您的需求。 特别是如果您的文件夹位于不同的域中,其他方法可能对您不起作用。

问题

考虑这样一种情况:您的程序需要使 Windows 文件系统中的 2 个文件夹始终保持同步,那么它必须满足以下要求

  • 实时性:源文件夹中的任何更改应立即反映在目标文件夹中
  • 在后台工作,无需维护
  • 如果目标文件夹位于其他计算机上,甚至不在域之外,程序也应该能够访问目标文件夹
  • 远程访问是通过提供有效身份来完成的。 用户名和密码应存储在config 文件中,并且密码应加密。

解决方案

这里的程序演示了如何解决上述问题

System.IO.FileSystemWatcher 类

此类用于观察源文件夹,并在文件夹中检测到任何更改时引发事件

//create FileSystemWatcher object 
FileSystemWatcher _watchFolder = new FileSystemWatcher();
string srcRoot = ConfigurationManager.AppSettings["localFolder"];
//define the properties of the file watcher
_watchFolder.Path = srcRoot;
_watchFolder.IncludeSubdirectories = true;
_watchFolder.NotifyFilter = System.IO.NotifyFilters.DirectoryName;
_watchFolder.NotifyFilter = 
	_watchFolder.NotifyFilter | System.IO.NotifyFilters.FileName;
_watchFolder.NotifyFilter = 
	_watchFolder.NotifyFilter | System.IO.NotifyFilters.Attributes;
// Now hook the triggers(events) to our handler (eventRaised)
_watchFolder.Changed += new FileSystemEventHandler(eventChangeRaised);
_watchFolder.Created += new FileSystemEventHandler(eventCreateRaised);
_watchFolder.Deleted += new FileSystemEventHandler(eventDeleteRaised);
_watchFolder.Renamed += new System.IO.RenamedEventHandler(eventRenameRaised);
//enable the events
_watchFolder.EnableRaisingEvents = true;

窗口服务

该程序将在计算机启动时运行。

NetWorkDrive 类

此类用于映射网络驱动器以创建通信通道。 动态搜索本地计算机中可用的驱动器名称。 当文件监视器检测到更改时,NetWorkDrive 对象将映射网络驱动器; 完成同步后,如果 5 秒钟内没有活动,该对象将取消映射网络驱动器以释放资源。 这里使用了 Timer 类。

SecurePassword 类

当窗口服务首次运行时,此类用于加密 config 文件中的密码。

如何使用窗口服务

注意

  • 此程序使用 Win32 API 在远程文件夹中映射网络驱动器。 请确保当前没有从本地计算机映射到目标文件夹的驱动器。
  • 确保用于访问远程域的用户是域用户。

安装

  • 运行 FileSyncServiceSetup.msi,按照向导安装窗口服务。
  • 打开位于安装文件夹中的 FileSync.exe.config(默认:C:\Program Files\Code Project\FileSyncServiceSetup)。
  • 填写所需的值。 注意:确保远程域中的用户是域用户。
  • 启动名为文件同步服务的窗口服务。
  • 安装完成后,打开本地文件夹并添加一个新文件; 验证远程文件夹中是否也显示了新文件。
  • 转到计算机管理 -> 系统工具 -> 事件查看器 -> 应用程序以查看相关日志。

这些代码是在 .NET 互联网社区中找到的。 我只是把它们放在一起。 随意使用它们。

历史

  • 2009 年 4 月 23 日:初次发布
© . All rights reserved.