【发布时间】:2011-06-25 20:44:39
【问题描述】:
好吧,开始这只是针对 Windows,我更喜欢在 .NET 上使用 C++,但我不反对boost::filesystem,尽管如果可以避免使用直接的 Windows API,我更喜欢.
现在的场景是另一台机器上的应用程序我无法更改,它将在机器上的特定目录中创建文件,我需要对其进行备份并进行一些额外的处理。目前我制作了一个小应用程序,它将使用FindFirstChangeNotification 和FindNextChangeNotification windows API 监听目标目录中的更改通知。
问题是,虽然我可以在目录中创建新文件、修改文件、大小更改等时收到通知,但它只通知一次,并没有具体告诉我哪些文件。我也看过ReadDirectoryChangesW,但那里的情况相同,只是我可以获得更具体的信息。
现在我可以扫描目录并尝试获取锁或打开文件以确定与上次通知相比具体发生了什么变化以及它们是否可用于进一步使用但在复制大文件的情况下我发现这是'不够好,因为文件还没有准备好被操作,而且在第一次之后我不会收到任何其他通知,所以没有办法知道它何时实际完成复制,除非在第一次通知之后我不断尝试获取锁直到成功。
我能想到的唯一另一件事就是拥有某种 end 令牌文件,但由于我无法控制在第一个创建文件的应用程序我不知道该怎么做,但仍然不理想。
有什么建议吗?
【问题讨论】:
标签: c++ windows file filesystems