(更简单的代码更新)
我正在使用ReadDirectoryChangesW()来监视某些文件夹的更改。当在其中一个监视文件夹中创建文件时,它可以正常工作,但是当创建子目录时,它永远不会得到通知。
例如,如果我观察路径c:\ testA \ testB并在该文件夹中创建文件,则ReadDirectoryChangesW()可以正常工作。如果我在该文件夹中创建目录,则WaitForSingleObjectEx不会返回。
有趣的是,如果我改为观察c:\ testA并在c:\ testA \ testB下创建一个目录,那么WaitForSingleObjectEx将按预期返回。请注意,我不是在观看子文件夹,(bWatchSubtree == false)所以这个结果很奇怪。
一种可能的解决方案是为我要监控的每个文件夹查看两个文件夹,文件更改的文件夹本身以及任何子目录更改的父文件夹,但您可以看到为什么这很乏味。
以下是一些重现问题的示例代码:
const byPropKey = (propertyName, value) => () => ({
[propertyName]: value,
});
在c:\ testA \ testB \ newfile.txt运行此代码并生成新的文件会产生此输出:
<input
value={username}
onChange={event => this.setState(byPropKey('username', event.target.value))}
type="text"
placeholder="Full Name"
/>
在c:\ testA \ testB \ newdir上运行此代码并创建一个新的目录永远不会被唤醒。
为什么创建目录会导致两个文件夹的通知?为什么不只是父母?为什么创建文件和创建文件夹的行为完全不同?