Python win32file.ReadDirectoryChangesW不';找不到所有移动的文件
早上好 我在用Python创建的程序中遇到了一个特殊的问题。看起来,当我将文件从一个位置拖放到另一个位置时,并非所有文件都被模块注册为事件 我一直在使用win32file和win32con尝试获取与将文件从一个位置移动到另一个位置进行处理相关的所有事件 这是我的检测代码的一小部分:Python win32file.ReadDirectoryChangesW不';找不到所有移动的文件,python,python-2.7,winapi,pywin32,Python,Python 2.7,Winapi,Pywin32,早上好 我在用Python创建的程序中遇到了一个特殊的问题。看起来,当我将文件从一个位置拖放到另一个位置时,并非所有文件都被模块注册为事件 我一直在使用win32file和win32con尝试获取与将文件从一个位置移动到另一个位置进行处理相关的所有事件 这是我的检测代码的一小部分: import win32file import win32con def main(): path_to_watch = 'D:\\' _file_list_dir = 1 # Create
import win32file
import win32con
def main():
path_to_watch = 'D:\\'
_file_list_dir = 1
# Create a watcher handle
_h_dir = win32file.CreateFile(
path_to_watch,
_file_list_dir,
win32con.FILE_SHARE_READ |
win32con.FILE_SHARE_WRITE |
win32con.FILE_SHARE_DELETE,
None,
win32con.OPEN_EXISTING,
win32con.FILE_FLAG_BACKUP_SEMANTICS,
None
)
while 1:
results = win32file.ReadDirectoryChangesW(
_h_dir,
1024,
True,
win32con.FILE_NOTIFY_CHANGE_FILE_NAME |
win32con.FILE_NOTIFY_CHANGE_DIR_NAME |
win32con.FILE_NOTIFY_CHANGE_ATTRIBUTES |
win32con.FILE_NOTIFY_CHANGE_SIZE |
win32con.FILE_NOTIFY_CHANGE_LAST_WRITE |
win32con.FILE_NOTIFY_CHANGE_SECURITY,
None,
None
)
for _action, _file in results:
if _action == 1:
print 'found!'
if _action == 2:
print 'deleted!'
我拖放了7个文件,结果只找到4个
# found!
# found!
# found!
# found!
如何检测所有丢弃的文件?(这是我能找到的最好的文档)是一个包装器。下面是它的状态(关于缓冲区):
1.一般的
当您第一次调用ReadDirectoryChangesW时,系统会分配一个缓冲区来存储更改信息。此缓冲区与目录句柄关联,直到它关闭并且在其生存期内其大小不变。在调用此函数之间发生的目录更改将添加到缓冲区,然后在下次调用时返回。如果缓冲区溢出,则丢弃缓冲区的全部内容,lpBytesReturned参数包含零,并且ReadDirectoryChangesW函数失败,错误代码为error\u NOTIFY\u ENUM\u DIR
- 我的理解是,这是一个不同于作为参数传递的缓冲区(lpBuffer):
- 前者被传递给ReadDirectoryChangesW的每个调用(可以是为每个调用传递的不同缓冲区(大小不同)
- 后者由系统分配,当前者在函数调用之前明确分配(由用户分配)
和时,前者是在函数调用之间存储数据(可能以某种原始格式)的,当函数被调用时,缓冲区内容被复制(并格式化)到lpBuffer(如果没有溢出)(同时被丢弃)
- 这多少证实了我先前的假设
- “缓冲区太大,系统无法分配”-可能在分配上一点的缓冲区时,会考虑nBufferLength