本帖最后由 hwbox 于 2010-06-13 15:41:22 编辑

解决方案 »

  1.   

    用FileSystemWatcher来做两个文件夹的同步?我个人认为不是很科学.  将你的监视类型分细: 
    1. 如果是Deleted 事件, 可以做到实时同步 , 
    2. Created, Changed 事件, 将被创建的文件和被修改的记录下来(已记录的文件则忽悠), 然后通过一定周期去检测你的记录, 找到相应的文件,做一次同步(清空记录表相应记录). 这样可以解决你的问题1.
      

  2.   


    1.只监视Deleted肯定是没有意义的。分开监视的话,向B拷文件的时候又会触发Created, Changed 事件。2.定期检测的话也解决不了我提到的4个问题。
      

  3.   

    关于问题2 , 如果是文件夹A的FileSystemWatcher触发的对文件夹B的操作, 在操作时,取消文件夹B的FileSystemWatcher, 或者使用一个状态来标识
      

  4.   

    情况1:A为源文件夹,当A文件夹中的子目录和文件发生变化时,由A向B进行覆盖。情况2:当B文件夹中的子目录和文件发生变化时,对A 进行验证,比对双方的文件或文件夹是否一致。当不一致由A向B进行覆盖。首先不是很了解,既然是A为主,B的修改,只要跟A不一致,就要被替换成A的,那么B似乎没有任何存在的价值?
    是否可以不要了?
      

  5.   

    你的问题真的很纠结.....虽然我有兴起但是马上就放假了,已经没心细再想问题了...楼下高手继续...节日快乐 有个免费软件: FreeFileSync 
      

  6.   

      我做了一个是FTP服务器文件同步,
    当主服务器上传了文件实时更新到子服务器
    Created, Changed 会产生很多事件,这里可以用timer 因为当时我做的是FTP服务器,
    根据FTP协议的特点:文件上传过程是先上传文件,建立空文件,此时,FTP服务端会锁定该文件的读写操作,然后逐渐填充内容,直到文件传送完毕,此时,FTP服务端会保存文件并释放句柄。更新覆盖是先清空文件内容,然后逐句填充,并保存释放句柄;根据FTP的整个特点,在捕获到文件系统变化以后对该文件进行尝试性的读取,如果该句柄被锁定,那么可以忽略该触发,直到能够读取的时候,说明文件已经上传或者更新完毕,这个时候,就可以捕获该文件名,并开始同步文件了
      

  7.   

    那还监控什么啊,你用的时候就从A往B 拷贝,
    如果要求不高,就直接判断个 LastModifiedDate 就算了,相同就略过,不同就覆盖.
      

  8.   

    我哪里是根据FTP服务器的特点做的,刚开始上传就锁定句柄,直到上传完成,才释放句柄,这时才触发changed事件,当然这是FTP服务器上
    如果不是你可以用timer ,网上有很多这样的例子,就是FileSystemWatcher,多次changed事件,google下就有很多,这个方法有一定的延迟。。
      

  9.   

    如果我架设一个FTP服务器,用FTP客户端软件上传。在服务器端用程序监控的时候,发现有一个ongreat事件后,如何判断文件的句柄是被FTP服务器锁定的。还是已经被释放了?另外这种情况下是只生成一个onchange事件吗?请帮忙再解释下。