使⽤Python判断⼀个⽂件是否被占⽤的⽅法教程
今天有同学问,⽤os模块的access()能否判断⼀个⽂件是否被占⽤?直觉上,这是⾏不通的,因为access()返回的是⽂件的读写属性。为了确认这⼀点,我简单测试了⼀下。
>>> import os
>>> fn = r'D:\temp\csdn\t.py' # 测试⽤的⽂件
>>> os.access(fn, os.F_OK) # ⽂件是否存在
True
>>> os.access(fn, os.R_OK) # ⽂件是否可读
True
>>> os.access(fn, os.W_OK) # ⽂件是否可写
True
>>> os.access(fn, os.X_OK) # ⽂件是否可执⾏
True
>>> fp = open(fn, 'a+') # 以追加写的⽅式打开⽂件
>>> os.access(fn, os.F_OK) # ⽂件当然还在
True
>>> os.access(fn, os.R_OK) # ⽂件依然可读
True
>>> os.access(fn, os.W_OK) # ⽂件依然可写
True
>>> os.access(fn, os.X_OK) # ⽂件依然执⾏
True
>>> fp.close()
可见,os.access()返回的是⽂件读写属性,与⽂件是否被占⽤没有半⽑钱关系。
后来,⾥有同学建议说,不妨⽤try尝试着open⽂件,如果成功,表⽰⽂件没有被占⽤,如果抛出异常,则表⽰⽂件被占⽤。
果真如此吗?还是⽤代码验证⼀下吧。
>>> fp1 = open(fn, 'a+')
>>> fp2 = open(fn, 'a+')
>>> fp1.close()
>>> fp2.close()
结果表明,对同⼀个⽂件以写的⽅式打开多次,系统并没有抛出异常。为什么会这样呢?究其原因,是因为⽂件被打开和⽂件
被占⽤是完全两个不同的问题。顺便提醒⼀下,做上⾯的测试时,不要使⽤'w'的⽅式,否则⽂件内容会被清空。
那么,究竟应该如何⽤Python判断⼀个⽂件是否被占⽤呢?这个问题还是要回归到操作系统层⾯来解决,也就是依赖win32api
模块。
>>> import win32file
>>> def is_used(file_name):
try:
vHandle = win32file.CreateFile(file_name, win32file.GENERIC_READ, 0, None, win32file.OPEN_EXISTING, win32file.FILE_ATTRIBUTE_NORMAL, None)  return int(vHandle) == win32file.INVALID_HANDLE_VALUE
python安装教程非常详细except:
return True
finally:
try:
win32file.CloseHandle(vHandle)
except:
pass
>>> fn = r'D:\temp\csdn\t.py'
>>> is_used(fn)
False
>>> fp = open(fn, 'a+')
>>> is_used(fn)
True
>>> fp.close()
>>> is_used(fn)
False
简单验证了⼀下,函数is_used()基本可⽤。
到此这篇关于使⽤Python判断⼀个⽂件是否被占⽤的⽂章就介绍到这了,更多相关Python判断⽂件被占⽤内容请搜索以前的⽂章或继续浏览下⾯的相关⽂章希望⼤家以后多多⽀持!

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。