日期:2014-05-17  浏览次数:21578 次

如何判断文件夹是否已经复制完成
本帖最后由 cancancam 于 2012-11-18 20:53:52 编辑 譬如共享了一个文件夹,别人可以通过samba把文件或文件夹存放到该文件夹中。C#可以用FileSystemWatcher来监视是否有新文件或文件夹存入到该文件夹中,但是如果遇到大文件或文件夹的时候,应该用什么办法可以判断这个文件或文件夹是否已经完成复制呢??

感谢大家!
------最佳解决方案--------------------
引用:
应该可以判断这个文件夹下是否有文件的增加,或是判断这个文件夹内容的大小是否在增加,如果在持续的增加肯定就是在占用!

这个毛招可以用下,这种情况下很难做到完美判断,如果是局域网或者网络比较顺畅的情况,连续几秒文件都无增长,基本可以确认文件传输完成或者终止了;另外还有个方向,一般文件在被其他用户使用的时候,你试图做出重命名或者删除等动作的时候,系统会提示你文件占用中,看看没有没有判断文件是否被占用的API可以调用;

一句话,暂时没找到完美方案,看你自己的需求和实际坏境,找个比较靠谱的方法,如果想要完全确保安全,就需要双方通信,对方负责完后,发送一个信息过来 
------其他解决方案--------------------
没有办法知道“一个文件夹是否复制完”,这不是一个状态,就像我不能通过观察你的动作判断你的工作是否做完了一样。
------其他解决方案--------------------
试图以独占方式打开文件,如果失败说明有程序正在写,否则就是“复制完了”。
------其他解决方案--------------------
根据被复制的文件夹的大小和原文件的大小和来判断
不知道可以不?
------其他解决方案--------------------
引用:
根据被复制的文件夹的大小和原文件的大小和来判断
不知道可以不?

感觉够呛    有许多文件都是先建立一个同等大小的文件然后再写内容 ISO文件什么 好像就是这样的
------其他解决方案--------------------
复制的时在里面放一个文件,并打开它(readWrite),复制万成后,delete
------其他解决方案--------------------
引用:
根据被复制的文件夹的大小和原文件的大小和来判断
不知道可以不?

这个感觉可行,移动文件夹的话,你必须里面有文件在被使用,才会报出异常。。
------其他解决方案--------------------
引用:
引用:复制的时在里面放一个文件,并打开它(readWrite),复制万成后,delete

谢谢你的回复,因为文件夹是共享给用户传文件的,无法要求用户给出“复制完成”的提示文件。

9楼的意思好像是  在文件夹里放一个标示性的文件 比如  mark.txt   在用户对这个文件夹进行指定操作时  比如文件的 添加 修改 删除   将这个文件打开 或者将这个文件中写入一个值   用于标示 此文件夹正在被改变  以这个文件来起到一个 类似“同步锁”的功能   我大概是这么理解的 感觉似乎可行
------其他解决方案--------------------
引用:
引用:引用:引用:复制的时在里面放一个文件,并打开它(readWrite),复制万成后,delete

谢谢你的回复,因为文件夹是共享给用户传文件的,无法要求用户给出“复制完成”的提示文件。
9楼的意思好像是  在文件夹里放一个标示性的文件 比如  ma……

楼主客气  这个文件不删除也可以  就存在于那个文件夹里 用作标示  有类似这种功能的软件貌似就是这样做的 SVN什么的 里面就会存放一个.svn的文件夹  具体用途不是很清楚 不过猜测应该是用作类似标示的用途 这个文件可以隐藏 只充当表示符号
------其他解决方案--------------------
先判断文件夹是否存在,在比较2个文件夹的大小 
------其他解决方案--------------------
你自己序列化一个文件到你要操作的文件夹,保存一个状态信息。如果你复制的程序跑完了,你就在把文件夹的那个序列化的文件读取下状态不就知道是不是复制结束了吗
------其他解决方案--------------------
引用:
引用:引用:引用:引用:引用:复制的时在里面放一个文件,并打开它(readWrite),复制万成后,delete

谢谢你的回复,因为文件夹是共享给用户传文件的,无法要求用户给出……

比如说 当一个用户开始向这个文件夹中复制文件的时候 就以独占的方式打开标示文件  然后开始复制文件  待文件全部复制完毕后  关闭标示文件。 这样 当另一个用户想知道是否有人正在对这个文件夹进行添加文件操作的时候 可以尝试以独占方式打开标示文件  如果无法打开 说明标示文件正在被另一个用户打开 也就是说 那个用户正在向这个文件夹中传输数据  这样 就可以判定是否有人在向这个文件夹中传输数据 以及是否传输完成了 不知我表达清楚了么
------其他解决方案--------------------
楼上说的打开文件,进行删除。如果是其他文件。你怎么确定那。那种抓 异常的方式不可行。