找回密码
 立即注册

扫一扫,访问微社区

QQ登录

只需一步,快速开始

查看: 4575|回复: 3

[已回复] 请教,如何判断文件不是正在复制(下载)中?

1

主题

2

帖子

2

积分

贫民

积分
2
工口勇者 发表于 2017-4-13 01:41:17 | 显示全部楼层 |阅读模式
项目中的一个情景是这样:有一个路径,不定时的有文件从其他渠道被转移进来,可能是人手经过smb从windows copy过来,也可能是机器wget下来
写了个python的脚本,由cron去定时调用,判断路径下有没有特定的文件需要处理,有的话做一系列的文件操作,详情略

现在遇到的情况是这样,拷贝进来的文件可能会比较大,可能脚本进行扫描目录的时候文件还没下载完成,这个时候被操作的话会造成文件损坏;
我无法控制在拷贝完成之前用临时文件名(例如像迅雷那样把未完成文件后缀临时改为.incompleted,等下载完毕再改名为原名);


目前想到的做法是遇到需要处理的文件,我先间隔若干秒判断文件尺寸有没有在不断的变化,如果停止变化了则认为是一个下载完毕的文件;
思路大概类似下面(代码语法可能不是很严谨,新手见谅)
  1. curFileSize = os.path.getsize(path)
  2. lastFileSize = -1 #初始化
  3. while curFileSzie != lastFileSize:
  4.     lastFileSize = curFileSize
  5.     time.sleep(5) #等5秒
  6.     curFileSize = os.path.getsize(path)
  7. #文件不再变化
  8. #...业务脚本..
复制代码
有没有更优雅可靠的方式解决这个问题呢?
由于在极端情况下(网络或文件IO堵塞)这个等待的延时之后文件大小可能没有变化,但实际上拷贝并未完成。

请各路大神不啬赐教



回复

使用道具 举报

0

主题

27

帖子

27

积分

贫民

积分
27
maximal_ideal 发表于 2017-4-13 14:26:11 | 显示全部楼层
查看有没有进程的打开了这个文件? 主要是文件COPY这个动作是哪个进程进行的? 监控这个进程就行了吧
回复 支持 反对

使用道具 举报

1

主题

2

帖子

2

积分

贫民

积分
2
工口勇者  楼主| 发表于 2017-4-13 16:00:22 | 显示全部楼层
maximal_ideal 发表于 2017-4-13 14:26
查看有没有进程的打开了这个文件? 主要是文件COPY这个动作是哪个进程进行的? 监控这个进程就行了吧 ...

文件来源不确定,所以我也挺头疼...
回复 支持 反对

使用道具 举报

0

主题

27

帖子

27

积分

贫民

积分
27
maximal_ideal 发表于 2017-4-17 12:29:57 | 显示全部楼层
工口勇者 发表于 2017-4-13 16:00
文件来源不确定,所以我也挺头疼...

没办法从进程这下手的确实比较麻烦 主要目的是不损害原文件写入的话 笨方法是 给原文件一个备份? 全部操作都对备份操作?
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表