本帖最后由 cancancam 于 2012-11-18 20:53:52 编辑

解决方案 »

  1.   


    你好,谢谢你的回复。文件是可以的,但是文件夹无法用该办法实现,因为有尝试过在一个回圈里面不断尝试Move这个文件夹,并catch IOException,但是如果文件夹里面有一个很大size的文件,这时,文件夹可以被Move,并且没有catch到任何exception。
      

  2.   

    感觉够呛    有许多文件都是先建立一个同等大小的文件然后再写内容 ISO文件什么 好像就是这样的
      

  3.   

    复制的时在里面放一个文件,并打开它(readWrite),复制万成后,delete
      

  4.   


    你好,谢谢你的回复,有尝试检查文件夹的大小,在一个无限回圈里面不断尝试获取这个文件夹的大小监视是否有增长,但是如果文件夹里面有一个很大size的文件,30几秒这个文件夹都没有改变大小,所以无法确定.
      

  5.   

    9楼的意思好像是  在文件夹里放一个标示性的文件 比如  .txt   在用户对这个文件夹进行指定操作时  比如文件的 添加 修改 删除   将这个文件打开 或者将这个文件中写入一个值   用于标示 此文件夹正在被改变  以这个文件来起到一个 类似“同步锁”的功能   我大概是这么理解的 感觉似乎可行
      

  6.   


    你好,这样的话,问题就变成,何时才delete这个文件了,也就是何时才解锁了。
      

  7.   

    楼主客气  这个文件不删除也可以  就存在于那个文件夹里 用作标示  有类似这种功能的软件貌似就是这样做的 SVN什么的 里面就会存放一个.svn的文件夹  具体用途不是很清楚 不过猜测应该是用作类似标示的用途 这个文件可以隐藏 只充当表示符号
      

  8.   


    因为用户是用samba的形式访问文件夹并直接copy文件夹的,所以无法获取原文件夹的大小,谢谢你的回复
      

  9.   

    楼上说的打开文件,进行删除。如果是其他文件。你怎么确定那。那种抓 异常的方式不可行。你其实可以做成安装文件那样。IDictiony文件缓存本地。
      

  10.   


    谢谢你的回复,复制并不是由程序执行的,是由user通过samba的形式访问,直接从本地copy到共享文件夹中。
      

  11.   


    谢谢你的解答,可能我问题没有描述清楚,是这样的
    1, A文件夹,以samba的形式共享,User 通过访问网络共享A文件夹
    2, B文件夹,User需要放到A中的文件夹现在程序用FileSystemWatcher监视A文件夹,当B被复制到A中时,B没有完成复制就触发了watcher的created事件,我想问的就是,如何判断B是否已经完成复制。复制的动作并不是由程序执行。
      

  12.   

    System.IO.File.Copy(@"E:\Movie\KKND.rmvb", @"E:\Movie\KKND2.rmvb");
    int k =0;
      

  13.   

    楼主用FileSystemWather来监视文件夹的Created的事件,所以肯定是在复制一开始就被触发了,这非常合理。
    然后就可以从这个时间起,对这个新创建的文件夹,还用FileSystemWatcher监视其Changed事件,并在每次Changed事件发生后记录这个最新的时间。接下来就用一个Timer每隔一定的时间检查这个最后的Changed事件被触发的事件,设定一个时间阈值,比如一分钟。那么文件夹停止变化已经一段时间,就可以认为这个复制已经完成了。
      

  14.   

     楼主是指一个用户USER,将B文件夹里的东西放到共享文件夹A中,USER自己不知道什么时候完成了复制过程是么?如果是这样似乎可以像WINDOWS那样,统计一下文件数量,然后单个文件检测是否完成,完成一个数量减1,直到0为止。
      

  15.   

    这个毛招可以用下,这种情况下很难做到完美判断,如果是局域网或者网络比较顺畅的情况,连续几秒文件都无增长,基本可以确认文件传输完成或者终止了;另外还有个方向,一般文件在被其他用户使用的时候,你试图做出重命名或者删除等动作的时候,系统会提示你文件占用中,看看没有没有判断文件是否被占用的API可以调用;一句话,暂时没找到完美方案,看你自己的需求和实际坏境,找个比较靠谱的方法,如果想要完全确保安全,就需要双方通信,对方负责完后,发送一个信息过来 
      

  16.   

    我们知道系统系统在copy完了一个会刷新UI,那么我们可以肯定的是系统消息里面应该就这东西存在,所以需要hook一下这部分内容,简单google 一下系统有个ICopyHook挂钩