- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
早上好,
我在Python中创建的程序遇到了一个特有的问题。看来,当我将文件从一个位置拖放到另一位置时,并不是所有文件都被模块注册为事件。
我一直在使用win32file和win32con来尝试获取与将文件从一个位置移动到另一位置进行处理有关的所有事件。
这是我的检测代码的片段:
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!'
# found!
# found!
# found!
# found!
最佳答案
[ActiveState.Docs]: win32file.ReadDirectoryChangesW(这是我可以找到的关于[GitHub]: mhammond/pywin32 - Python for Windows (pywin32) Extensions的最佳文档)是[MS.Docs]: ReadDirectoryChangesW function的包装。这是它声明的内容(关于缓冲区):
一般
首次调用ReadDirectoryChangesW时,系统会分配一个缓冲区来存储更改信息。该缓冲区与目录句柄相关联,直到它被关闭并且其大小在其生命周期内保持不变。在两次调用此函数之间发生的目录更改将添加到缓冲区中,然后在下一次调用时返回。如果缓冲区溢出,则缓冲区的全部内容将被丢弃,lpBytesReturned参数包含零,并且ReadDirectoryChangesW函数失败,错误代码为ERROR_NOTIFY_ENUM_DIR。
我的理解是,这与作为参数传递的缓冲区(lpBuffer)是不同的缓冲区:
前者传递给ReadDirectoryChangesW的每个调用(可以是每个调用传递的不同缓冲区(大小不同))
后者是由系统分配的,而前者显然是在函数调用之前(由用户)分配的
就是在函数调用之间存储数据(可能以某种原始格式存储)的函数,并且在调用函数时,缓冲区内容被复制(并格式化)到lpBuffer(如果同时没有飞越(并丢弃))
同步
成功完成同步后,lpBuffer参数是一个格式化的缓冲区,写入该缓冲区的字节数在lpBytesReturned中可用。如果传输的字节数为零,则缓冲区太大,系统无法分配,或者缓冲区太小,无法提供有关目录或子树中发生的所有更改的详细信息。在这种情况下,您应该通过列举目录或子树来计算更改。
这在某种程度上证实了我以前的假设
“缓冲区太大,系统无法分配”-也许分配前一点的缓冲区时,是否考虑了nBufferLength?
无论如何,我接受了您的代码并对其进行了“一点点”更改。
code.py:
import sys
import msvcrt
import pywintypes
import win32file
import win32con
import win32api
import win32event
FILE_LIST_DIRECTORY = 0x0001
FILE_ACTION_ADDED = 0x00000001
FILE_ACTION_REMOVED = 0x00000002
ASYNC_TIMEOUT = 5000
BUF_SIZE = 65536
def get_dir_handle(dir_name, async):
flags_and_attributes = win32con.FILE_FLAG_BACKUP_SEMANTICS
if async:
flags_and_attributes |= win32con.FILE_FLAG_OVERLAPPED
dir_handle = win32file.CreateFile(
dir_name,
FILE_LIST_DIRECTORY,
(win32con.FILE_SHARE_READ |
win32con.FILE_SHARE_WRITE |
win32con.FILE_SHARE_DELETE),
None,
win32con.OPEN_EXISTING,
flags_and_attributes,
None
)
return dir_handle
def read_dir_changes(dir_handle, size_or_buf, overlapped):
return win32file.ReadDirectoryChangesW(
dir_handle,
size_or_buf,
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),
overlapped,
None
)
def handle_results(results):
for item in results:
print(" {} {:d}".format(item, len(item[1])))
_action, _ = item
if _action == FILE_ACTION_ADDED:
print(" found!")
if _action == FILE_ACTION_REMOVED:
print(" deleted!")
def esc_pressed():
return msvcrt.kbhit() and ord(msvcrt.getch()) == 27
def monitor_dir_sync(dir_handle):
idx = 0
while True:
print("Index: {:d}".format(idx))
idx += 1
results = read_dir_changes(dir_handle, BUF_SIZE, None)
handle_results(results)
if esc_pressed():
break
def monitor_dir_async(dir_handle):
idx = 0
buffer = win32file.AllocateReadBuffer(BUF_SIZE)
overlapped = pywintypes.OVERLAPPED()
overlapped.hEvent = win32event.CreateEvent(None, False, 0, None)
while True:
print("Index: {:d}".format(idx))
idx += 1
read_dir_changes(dir_handle, buffer, overlapped)
rc = win32event.WaitForSingleObject(overlapped.hEvent, ASYNC_TIMEOUT)
if rc == win32event.WAIT_OBJECT_0:
bufer_size = win32file.GetOverlappedResult(dir_handle, overlapped, True)
results = win32file.FILE_NOTIFY_INFORMATION(buffer, bufer_size)
handle_results(results)
elif rc == win32event.WAIT_TIMEOUT:
#print(" timeout...")
pass
else:
print("Received {:d}. Exiting".format(rc))
break
if esc_pressed():
break
win32api.CloseHandle(overlapped.hEvent)
def monitor_dir(dir_name, async=False):
dir_handle = get_dir_handle(dir_name, async)
if async:
monitor_dir_async(dir_handle)
else:
monitor_dir_sync(dir_handle)
win32api.CloseHandle(dir_handle)
def main():
print("Python {:s} on {:s}\n".format(sys.version, sys.platform))
async = True
print("Attempting {}ynchronous mode using a buffer {:d} bytes long...".format("As" if async else "S", BUF_SIZE))
monitor_dir(".\\test", async=async)
if __name__ == "__main__":
main()
e:\Work\Dev\StackOverflow\q049799109>dir /b test
0123456789.txt
01234567890123456789.txt
012345678901234567890123456789.txt
0123456789012345678901234567890123456789.txt
01234567890123456789012345678901234567890123456789.txt
012345678901234567890123456789012345678901234567890123456789.txt
0123456789012345678901234567890123456789012345678901234567890123456789.txt
01234567890123456789012345678901234567890123456789012345678901234567890123456789.txt
012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789.txt
0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789.txt
e:\Work\Dev\StackOverflow\q049799109>
e:\Work\Dev\StackOverflow\q049799109>"C:\Install\x64\HPE\OPSWpython\2.7.10__00\python.exe" code.py
Python 2.7.10 (default, Mar 8 2016, 15:02:46) [MSC v.1600 64 bit (AMD64)] on win32
Attempting Synchronous mode using a buffer 512 bytes long...
Index: 0
(2, u'0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789.txt') 104
deleted!
Index: 1
(2, u'012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789.txt') 94
deleted!
Index: 2
(2, u'01234567890123456789012345678901234567890123456789012345678901234567890123456789.txt') 84
deleted!
Index: 3
(2, u'0123456789012345678901234567890123456789012345678901234567890123456789.txt') 74
deleted!
(2, u'012345678901234567890123456789012345678901234567890123456789.txt') 64
deleted!
Index: 4
(2, u'01234567890123456789012345678901234567890123456789.txt') 54
deleted!
Index: 5
(2, u'0123456789012345678901234567890123456789.txt') 44
deleted!
(2, u'012345678901234567890123456789.txt') 34
deleted!
Index: 6
(2, u'01234567890123456789.txt') 24
deleted!
(2, u'0123456789.txt') 14
deleted!
Index: 7
(1, u'0123456789.txt') 14
found!
Index: 8
(3, u'0123456789.txt') 14
Index: 9
(1, u'01234567890123456789.txt') 24
found!
Index: 10
(3, u'01234567890123456789.txt') 24
(1, u'012345678901234567890123456789.txt') 34
found!
(3, u'012345678901234567890123456789.txt') 34
(1, u'0123456789012345678901234567890123456789.txt') 44
found!
Index: 11
(3, u'0123456789012345678901234567890123456789.txt') 44
(1, u'01234567890123456789012345678901234567890123456789.txt') 54
found!
(3, u'01234567890123456789012345678901234567890123456789.txt') 54
Index: 12
Index: 13
(1, u'01234567890123456789012345678901234567890123456789012345678901234567890123456789.txt') 84
found!
Index: 14
Index: 15
(1, u'0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789.txt') 104
found!
Index: 16
(3, u'0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789.txt') 104
Index: 17
(1, u'a') 1
found!
Index: 18
(3, u'a') 1
e:\Work\Dev\StackOverflow\q049799109>
e:\Work\Dev\StackOverflow\q049799109>"C:\Install\x64\HPE\OPSWpython\2.7.10__00\python.exe" code.py
Python 2.7.10 (default, Mar 8 2016, 15:02:46) [MSC v.1600 64 bit (AMD64)] on win32
Attempting Synchronous mode using a buffer 65536 bytes long...
Index: 0
(2, u'0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789.txt') 104
deleted!
Index: 1
(2, u'012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789.txt') 94
deleted!
Index: 2
(2, u'01234567890123456789012345678901234567890123456789012345678901234567890123456789.txt') 84
deleted!
Index: 3
(2, u'0123456789012345678901234567890123456789012345678901234567890123456789.txt') 74
deleted!
Index: 4
(2, u'012345678901234567890123456789012345678901234567890123456789.txt') 64
deleted!
Index: 5
(2, u'01234567890123456789012345678901234567890123456789.txt') 54
deleted!
Index: 6
(2, u'0123456789012345678901234567890123456789.txt') 44
deleted!
Index: 7
(2, u'012345678901234567890123456789.txt') 34
deleted!
(2, u'01234567890123456789.txt') 24
deleted!
(2, u'0123456789.txt') 14
deleted!
Index: 8
(1, u'0123456789.txt') 14
found!
Index: 9
(3, u'0123456789.txt') 14
Index: 10
(1, u'01234567890123456789.txt') 24
found!
Index: 11
(3, u'01234567890123456789.txt') 24
Index: 12
(1, u'012345678901234567890123456789.txt') 34
found!
Index: 13
(3, u'012345678901234567890123456789.txt') 34
Index: 14
(1, u'0123456789012345678901234567890123456789.txt') 44
found!
Index: 15
(3, u'0123456789012345678901234567890123456789.txt') 44
Index: 16
(1, u'01234567890123456789012345678901234567890123456789.txt') 54
found!
(3, u'01234567890123456789012345678901234567890123456789.txt') 54
Index: 17
(1, u'012345678901234567890123456789012345678901234567890123456789.txt') 64
found!
(3, u'012345678901234567890123456789012345678901234567890123456789.txt') 64
(1, u'0123456789012345678901234567890123456789012345678901234567890123456789.txt') 74
found!
Index: 18
(3, u'0123456789012345678901234567890123456789012345678901234567890123456789.txt') 74
(1, u'01234567890123456789012345678901234567890123456789012345678901234567890123456789.txt') 84
found!
(3, u'01234567890123456789012345678901234567890123456789012345678901234567890123456789.txt') 84
(1, u'012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789.txt') 94
found!
(3, u'012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789.txt') 94
(1, u'0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789.txt') 104
found!
(3, u'0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789.txt') 104
Index: 20
(2, u'a') 1
deleted!
e:\Work\Dev\StackOverflow\q049799109>
e:\Work\Dev\StackOverflow\q049799109>"C:\Install\x64\HPE\OPSWpython\2.7.10__00\python.exe" code.py
Python 2.7.10 (default, Mar 8 2016, 15:02:46) [MSC v.1600 64 bit (AMD64)] on win32
Attempting Asynchronous mode using a buffer 512 bytes long...
Index: 0
Index: 1
(2, u'0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789.txt') 104
deleted!
Index: 2
(2, u'012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789.txt') 94
deleted!
Index: 3
(2, u'01234567890123456789012345678901234567890123456789012345678901234567890123456789.txt') 84
deleted!
Index: 4
(2, u'012345678901234567890123456789012345678901234567890123456789.txt') 64
deleted!
Index: 5
(2, u'01234567890123456789012345678901234567890123456789.txt') 54
deleted!
Index: 6
(2, u'0123456789012345678901234567890123456789.txt') 44
deleted!
Index: 7
(2, u'012345678901234567890123456789.txt') 34
deleted!
Index: 8
(2, u'01234567890123456789.txt') 24
deleted!
Index: 9
(2, u'0123456789.txt') 14
deleted!
Index: 10
Index: 11
Index: 12
(1, u'0123456789.txt') 14
found!
Index: 13
(1, u'01234567890123456789.txt') 24
found!
Index: 14
(1, u'012345678901234567890123456789.txt') 34
found!
Index: 15
(3, u'012345678901234567890123456789.txt') 34
Index: 16
(1, u'0123456789012345678901234567890123456789.txt') 44
found!
(3, u'0123456789012345678901234567890123456789.txt') 44
Index: 17
Index: 18
(1, u'0123456789012345678901234567890123456789012345678901234567890123456789.txt') 74
found!
Index: 19
Index: 20
(1, u'012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789.txt') 94
found!
Index: 21
Index: 22
Index: 23
Index: 24
e:\Work\Dev\StackOverflow\q049799109>
e:\Work\Dev\StackOverflow\q049799109>"C:\Install\x64\HPE\OPSWpython\2.7.10__00\python.exe" code.py
Python 2.7.10 (default, Mar 8 2016, 15:02:46) [MSC v.1600 64 bit (AMD64)] on win32
Attempting Asynchronous mode using a buffer 65536 bytes long...
Index: 0
Index: 1
(2, u'0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789.txt') 104
deleted!
Index: 2
(2, u'012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789.txt') 94
deleted!
Index: 3
(2, u'01234567890123456789012345678901234567890123456789012345678901234567890123456789.txt') 84
deleted!
Index: 4
(2, u'0123456789012345678901234567890123456789012345678901234567890123456789.txt') 74
deleted!
Index: 5
(2, u'012345678901234567890123456789012345678901234567890123456789.txt') 64
deleted!
Index: 6
(2, u'01234567890123456789012345678901234567890123456789.txt') 54
deleted!
Index: 7
(2, u'0123456789012345678901234567890123456789.txt') 44
deleted!
Index: 8
(2, u'012345678901234567890123456789.txt') 34
deleted!
(2, u'01234567890123456789.txt') 24
deleted!
Index: 9
(2, u'0123456789.txt') 14
deleted!
Index: 10
Index: 11
Index: 12
(1, u'0123456789.txt') 14
found!
Index: 13
(1, u'01234567890123456789.txt') 24
found!
Index: 14
(1, u'012345678901234567890123456789.txt') 34
found!
Index: 15
(3, u'012345678901234567890123456789.txt') 34
(1, u'0123456789012345678901234567890123456789.txt') 44
found!
(3, u'0123456789012345678901234567890123456789.txt') 44
Index: 16
(1, u'01234567890123456789012345678901234567890123456789.txt') 54
found!
(3, u'01234567890123456789012345678901234567890123456789.txt') 54
(1, u'012345678901234567890123456789012345678901234567890123456789.txt') 64
found!
(3, u'012345678901234567890123456789012345678901234567890123456789.txt') 64
(1, u'0123456789012345678901234567890123456789012345678901234567890123456789.txt') 74
found!
Index: 17
(3, u'0123456789012345678901234567890123456789012345678901234567890123456789.txt') 74
(1, u'01234567890123456789012345678901234567890123456789012345678901234567890123456789.txt') 84
found!
(3, u'01234567890123456789012345678901234567890123456789012345678901234567890123456789.txt') 84
(1, u'012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789.txt') 94
found!
(3, u'012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789.txt') 94
(1, u'0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789.txt') 104
found!
(3, u'0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789.txt') 104
Index: 18
Index: 19
win32con.FILE_NOTIFY_CHANGE_FILE_NAME
在脚本的开头使用
from win32con import FILE_NOTIFY_CHANGE_FILE_NAME
,并且仅在循环中使用FILE_NOTIFY_CHANGE_FILE_NAME(以避免在模块中进行变量查找)
win32file.GetQueuedCompletionStatus
方法获取结果(仅异步)
关于python - win32file.ReadDirectoryChangesW找不到所有移动的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49799109/
在项目属性窗口的应用程序选项卡和启动对象组合框中,我无法看到我的 win 表单以将其中一个设置为启动对象。 它出什么问题了? 最佳答案 开通 Program.cs启动项目的文件(在解决方案中选择为启动
我的问题是,当我得到正确的数字时,python 脚本结束,但不打印:你赢了! import random number = random.randint(1,100) # This part work
我使用 Eclipse 开发了一个 Java 应用程序。我使用的电脑操作系统是Win Vista。我在 Win XP 计算机上使用此应用程序时遇到问题。我发现的问题是: 如果在我的代码中我使用以下几行
显然,这将打印出石头/剪刀/布获胜或平局。 实现“石头胜剪刀——计算机胜!”这样的结果的最佳方式是什么?等等? var userChoice = prompt("Do you choose rock,
我正在开发一个使用HttpWebRequest将请求发送到另一台服务器的ASP.NET Web应用程序。它通过HTTPS发送请求,并且远程服务器需要客户端证书。该请求在.NET应用程序中失败,显然无法
我正在 WIn XP 上使用 VC6 开发应用程序。使用 GetKeyBoardLayoutList() 和 GetLocalInfo() API 从系统检索默认输入语言列表。 代码如下。 `UINT
我在 WPF 中创建了一个无边框窗口。我已经编写了一个事件来最大化窗口,但是在最大化时,部分窗口有时会隐藏在任务栏后面,片刻之后会出现在任务栏顶部。 如何确保窗口每次都保持在任务栏的顶部?以下是我实现
我开始制作 3d 游戏。然后我停了一段时间并安装了win7。现在我想继续研究它只是为了发现代码卡住了!在 XP 上,我将 View 渲染到窗体上。并且游戏循环和所有游戏形式都在同一个线程上运行! 这在
main() { int *p; free(p); } 此代码在 Win 2K 中崩溃。但不知何故不会在 Win Xp 中崩溃!知道为什么吗? 编辑:是的。这是一个错误,不应该被写入。更多
我在我的应用程序中使用 libeay32.dll/ssleay32.dll 库来支持 https。库在 Windows 7 上成功加载(不是通过我的应用程序,通过 Qt 库),但是我在 Windows
在源代码下方添加了新的详细信息。 有一个问题是 Delphi,其中 Internet 代码可在 Win 10 上运行,但不能在 Win 7 上运行。我正在尝试将一个小项目连接到 haveibeenpw
我在 Win 7 上为 Perfmon 创建了 xml 模板。我能够导入它并运行它 - 一切正常。现在,当我将此 xml 复制到 Win 2008 R2 计算机并尝试将其导入到 perfmon 中时,
我在使用标准数据驱动的 Winform 应用程序时遇到了一个有趣的问题。 该应用程序最初是在 Windows 7 和 Visual Studio 2010 上开发的。然后我用 Windows 8 和
我有一个在 Windows 7(64 位)上编写的程序,可以在我的计算机上正确编译和运行。 但在其他计算机上(特别是在 Windows 8(64 位)上)该程序无法运行。当我尝试运行它时,它说我的程序
将现有的基于 Vb6.0 win 的应用程序转换为基于 c# win 的应用程序的最快方法是什么? 最佳答案 核心语言如此不同,我不得不说从头开始,只复制复杂的代码位。如果您从头开始,您将不必处理所有
我正在处理 IE 11 在 Windows 8 和 Windows 8.1 上的奇怪行为。我正在固定定位元素内的元素位置。而且它变得很奇怪。当我用开发工具检查它时它在正确的位置,但在视觉上它完全在不同
将使用 Java x32 在 eclipse x32 上创建的项目导入到使用 java x64 的 eclipse x64 上有哪些挑战? 最佳答案 Java 是跨平台的,所以你应该不会有任何问题。
鉴于 l 是一个整数列表并且 win 是一个整数,下面的代码生成一个列表 lpadded: lpadded = win // 2 * [-1] + l + win // 2 * [-1] 在 lpad
我有一个适用于 Windows Phone 8.1 的应用程序及其 UWP 版本。我想在 Windows 中更改应用程序的背景时动态更改它。 用例是: 启动应用,背景主题为深色。 按下手机上的主页按钮
不完全确定我是否已经解决了这个问题,但这是我所看到的以及我认为正在发生的事情。 我有一个主要用 C 编写的 Win32 程序,它加载一个 C++ DLL。该 DLL 通过 COM 对象将数据从 C 程
我是一名优秀的程序员,十分优秀!