实时文件夹同步 Windows 服务






3.92/5 (8投票s)
一个 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 日:初次发布