C# 为什么OS X在复制到Samba共享时不像windows那样锁定文件?

C# 为什么OS X在复制到Samba共享时不像windows那样锁定文件?,c#,.net,macos,filesystemwatcher,samba,C#,.net,Macos,Filesystemwatcher,Samba,我有一个使用.net FileSystemWatcher观看Samba网络共享视频文件的项目。当它看到一个文件时,会将其添加到一个编码队列中。当文件退出队列时,它们将被移动到本地目录,然后进程将文件编码为几种不同的格式,并将其输出到输出目录 出现问题的原因是视频文件太大,通常需要几分钟才能将其完全复制到网络目录中,因此当文件退出队列时,它可能已经或可能尚未完全复制到网络共享中。当从windows计算机复制文件时,我能够处理它,因为尝试移动仍在复制的文件会引发IOException。我只是捕获异常

我有一个使用.net FileSystemWatcher观看Samba网络共享视频文件的项目。当它看到一个文件时,会将其添加到一个编码队列中。当文件退出队列时,它们将被移动到本地目录,然后进程将文件编码为几种不同的格式,并将其输出到输出目录

出现问题的原因是视频文件太大,通常需要几分钟才能将其完全复制到网络目录中,因此当文件退出队列时,它可能已经或可能尚未完全复制到网络共享中。当从windows计算机复制文件时,我能够处理它,因为尝试移动仍在复制的文件会引发IOException。我只是捕获异常并每隔几秒钟重试一次,直到复制完成

但是,当从运行OS X的计算机将文件放入Samba共享时,不会引发IOException。相反,一个部分文件被复制到工作目录中,该目录由于不是有效的视频文件而无法编码


所以我的问题是,有没有办法让FileSystemWatcher在触发其创建的事件之前等待文件被完全写入,我认为这个问题的答案是否定的?或者,有没有办法让从OS X复制的文件与windows中的文件行为类似?还是我需要找到另一种观看Samba共享的解决方案?谢谢您的帮助。

选项3。最好的办法是有一个进程来监视传入的共享文件。当它看到一个文件时,注意它的大小和/或修改日期

然后,经过一段时间,比如,1秒或2秒,再次查看。注意以前看到的任何文件,并将其新大小/修改日期与上次看到的文件进行比较

任何文件在足够长的时间1s内没有更改?5秒?我们认为已经完成了

完成文件后,将该文件移动/重命名到另一个目录。加载过程可以从这个目录运行。它知道只有完整的文件在此目录中

通过这两个阶段的过程,您以后可以添加其他规则来接受文件,因为在文件移动到其适当的暂存区域之前,所有这些规则都必须通过,您可以检查格式、检查大小等,而不仅仅是检查文件存在的简单规则


以后的进程可以依赖于文件的存在,既可以作为启动机制,也可以作为重启机制。当流程在失败或关闭后重新启动时,它可以假定第二个暂存中的任何文件都是新的或不完整的,并根据其自身的内部状态采取适当的操作。处理完成后,它可以选择删除文件,或将其移动到完成的区域进行存档或其他操作。

选项3。最好的办法是有一个进程来监视传入的共享文件。当它看到一个文件时,注意它的大小和/或修改日期

然后,经过一段时间,比如,1秒或2秒,再次查看。注意以前看到的任何文件,并将其新大小/修改日期与上次看到的文件进行比较

任何文件在足够长的时间1s内没有更改?5秒?我们认为已经完成了

完成文件后,将该文件移动/重命名到另一个目录。加载过程可以从这个目录运行。它知道只有完整的文件在此目录中

通过这两个阶段的过程,您以后可以添加其他规则来接受文件,因为在文件移动到其适当的暂存区域之前,所有这些规则都必须通过,您可以检查格式、检查大小等,而不仅仅是检查文件存在的简单规则


以后的进程可以依赖于文件的存在,既可以作为启动机制,也可以作为重启机制。当流程在失败或关闭后重新启动时,它可以假定第二个暂存中的任何文件都是新的或不完整的,并根据其自身的内部状态采取适当的操作。处理完成后,它可以选择删除文件,或将其移动到已完成的区域进行存档或其他操作。

是否可以修改源应用程序的行为?是否上载扩展名为.tmp的文件?完成后将其移除。一旦您看到一个没有.tmp扩展名的新文件,您将有一个完整的文件要处理。目前没有源应用程序。这只是一个网络共享,视频制作人员在其中放下他们最后的编辑以进行编码。我在对威尔回答的评论中提到,下一个版本计划有一个上传应用程序,但他们也希望继续拥有一个drop文件夹。你能修改源应用程序的行为吗?是否上载扩展名为.tmp的文件?完成后将其移除。一旦您看到一个没有.tmp扩展名的新文件,您将有一个完整的文件要处理
e不是源应用程序。这只是一个网络共享,视频制作人员在其中放下他们最后的编辑以进行编码。我在对威尔回答的评论中提到,下一个版本计划有一个上传应用程序,但他们也希望继续有一个drop文件夹。谢谢威尔。这正是我所害怕/期待的。我已经准备进行一次重要的重构,所以我想我会把它添加到任务列表中。谢谢。这正是我所害怕/期待的。我已经在进行一次重要的重构,所以我想我会把它添加到任务列表中。