Labfans是一个针对大学生、工程师和科研工作者的技术社区。 论坛首页 | 联系我们(Contact Us)
MATLAB爱好者论坛-LabFans.com
返回   MATLAB爱好者论坛-LabFans.com > 其它 > 资料存档
资料存档 资料存档
回复
 
主题工具 显示模式
旧 2019-12-07, 23:17   #1
poster
高级会员
 
注册日期: 2019-11-21
帖子: 3,006
声望力: 66
poster 正向着好的方向发展
默认 检测到传输中的文件?

我正在编写一个应用程序,该应用程序每隔几秒钟轮询一次目录,以监视新输入文件的目录。新文件通常可能是几兆字节,因此需要花费一些时间才能完全到达输入目录(例如:从远程共享复制时)。

有没有一种简单的方法来检测文件当前是否正在复制中?理想情况下,任何方法都是与平台和文件系统无关的,但是如果不同的平台可能需要特定的策略,则该方法无效。

我已经考虑过将两个目录列表分开几秒钟并比较文件大小,但这会引入时间/可靠性权衡,除非有其他选择,否则我的上级将不满意。

对于背景,该应用程序被编写为一组Matlab M文件,因此恐怕没有JRE / CLR技巧。

编辑:文件是通过直接移动/复制操作从网络驱动器或本地文件系统上的另一个位置直接到达输入的。此复制操作可能是由人类用户而不是其他应用程序发起的。

结果,很难对文件提供者承担任何责任来添加控制文件或使用中间暂存区。

结论:似乎没有简单的方法可以完成此操作,因此,我决定采用带括号的方法-如果出现以下情况,文件就可以处理了:
  • 它的大小在一段时间内不会改变, 并且
  • 可以以只读模式打开文件(某些复制过程会在文件上加锁)。
感谢大家的回应!

回答:
这是一个像山丘一样古老的中间件问题,简单的答案是:不。

这两个“解决方案”是文件上传者的责任:(1)将文件上传到暂存目录中,然后将其移至目标目录中(2)上传文件,然后创建/上传一个“就绪”文件指示内容文件的状态。

第一个更好,但两者都不雅致。事实是,存在比文件系统更好的通信媒体。考虑使用一些只涉及推送或拉取(而不是两者都涉及的文件系统)的IPC,例如HTTP POST,JMS或MSMQ队列等。此外,这也可以是同步的,允许进程接收文件确认内容,甚至检查其是否值得,并向客户提供收据-这是不可否认的正义之路。遵循此步骤,您将永远不会为文件是否已交付到服务器进行处理而争论不休。

M.
poster 当前离线   回复时引用此帖
回复


发帖规则
不可以发表新主题
不可以发表回复
不可以上传附件
不可以编辑自己的帖子

启用 BB 代码
论坛禁用 表情符号
论坛启用 [IMG] 代码
论坛启用 HTML 代码



所有时间均为北京时间。现在的时间是 23:49


Powered by vBulletin
版权所有 ©2000 - 2025,Jelsoft Enterprises Ltd.