关于文件夹监控和同步过程的问题求一个解决思路 本帖最后由 hwbox 于 2010-06-13 15:41:22 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 用FileSystemWatcher来做两个文件夹的同步?我个人认为不是很科学. 将你的监视类型分细: 1. 如果是Deleted 事件, 可以做到实时同步 , 2. Created, Changed 事件, 将被创建的文件和被修改的记录下来(已记录的文件则忽悠), 然后通过一定周期去检测你的记录, 找到相应的文件,做一次同步(清空记录表相应记录). 这样可以解决你的问题1. 1.只监视Deleted肯定是没有意义的。分开监视的话,向B拷文件的时候又会触发Created, Changed 事件。2.定期检测的话也解决不了我提到的4个问题。 关于问题2 , 如果是文件夹A的FileSystemWatcher触发的对文件夹B的操作, 在操作时,取消文件夹B的FileSystemWatcher, 或者使用一个状态来标识 情况1:A为源文件夹,当A文件夹中的子目录和文件发生变化时,由A向B进行覆盖。情况2:当B文件夹中的子目录和文件发生变化时,对A 进行验证,比对双方的文件或文件夹是否一致。当不一致由A向B进行覆盖。首先不是很了解,既然是A为主,B的修改,只要跟A不一致,就要被替换成A的,那么B似乎没有任何存在的价值?是否可以不要了? 你的问题真的很纠结.....虽然我有兴起但是马上就放假了,已经没心细再想问题了...楼下高手继续...节日快乐 有个免费软件: FreeFileSync 我做了一个是FTP服务器文件同步,当主服务器上传了文件实时更新到子服务器Created, Changed 会产生很多事件,这里可以用timer 因为当时我做的是FTP服务器,根据FTP协议的特点:文件上传过程是先上传文件,建立空文件,此时,FTP服务端会锁定该文件的读写操作,然后逐渐填充内容,直到文件传送完毕,此时,FTP服务端会保存文件并释放句柄。更新覆盖是先清空文件内容,然后逐句填充,并保存释放句柄;根据FTP的整个特点,在捕获到文件系统变化以后对该文件进行尝试性的读取,如果该句柄被锁定,那么可以忽略该触发,直到能够读取的时候,说明文件已经上传或者更新完毕,这个时候,就可以捕获该文件名,并开始同步文件了 那还监控什么啊,你用的时候就从A往B 拷贝,如果要求不高,就直接判断个 LastModifiedDate 就算了,相同就略过,不同就覆盖. 我哪里是根据FTP服务器的特点做的,刚开始上传就锁定句柄,直到上传完成,才释放句柄,这时才触发changed事件,当然这是FTP服务器上如果不是你可以用timer ,网上有很多这样的例子,就是FileSystemWatcher,多次changed事件,google下就有很多,这个方法有一定的延迟。。 如果我架设一个FTP服务器,用FTP客户端软件上传。在服务器端用程序监控的时候,发现有一个ongreat事件后,如何判断文件的句柄是被FTP服务器锁定的。还是已经被释放了?另外这种情况下是只生成一个onchange事件吗?请帮忙再解释下。 关于用户空间的疑问 fastreport .net VS2005打包大文件 未能找到文件存储空间不足 无法完成此操作 c#如何获取另外一个程序中的TDrawGrid表格中的数据? 电脑上没有access,c#能通过程序能获取数据吗 你好.我想请教你一个问题 com+怎么在里面调用office的com啊? 关于如何引入命名空间的问题?请指教 控件定制的相关问题 100分!求C#版的win32API列表和说明!!! 请教Castle ActiveRecord的问题 C# 控件释放问题
1. 如果是Deleted 事件, 可以做到实时同步 ,
2. Created, Changed 事件, 将被创建的文件和被修改的记录下来(已记录的文件则忽悠), 然后通过一定周期去检测你的记录, 找到相应的文件,做一次同步(清空记录表相应记录). 这样可以解决你的问题1.
1.只监视Deleted肯定是没有意义的。分开监视的话,向B拷文件的时候又会触发Created, Changed 事件。2.定期检测的话也解决不了我提到的4个问题。
是否可以不要了?
当主服务器上传了文件实时更新到子服务器
Created, Changed 会产生很多事件,这里可以用timer 因为当时我做的是FTP服务器,
根据FTP协议的特点:文件上传过程是先上传文件,建立空文件,此时,FTP服务端会锁定该文件的读写操作,然后逐渐填充内容,直到文件传送完毕,此时,FTP服务端会保存文件并释放句柄。更新覆盖是先清空文件内容,然后逐句填充,并保存释放句柄;根据FTP的整个特点,在捕获到文件系统变化以后对该文件进行尝试性的读取,如果该句柄被锁定,那么可以忽略该触发,直到能够读取的时候,说明文件已经上传或者更新完毕,这个时候,就可以捕获该文件名,并开始同步文件了
如果要求不高,就直接判断个 LastModifiedDate 就算了,相同就略过,不同就覆盖.
如果不是你可以用timer ,网上有很多这样的例子,就是FileSystemWatcher,多次changed事件,google下就有很多,这个方法有一定的延迟。。