gpt4 book ai didi

c++ - ReadDirectoryChangesW 不做任何事情 c++

转载 作者:行者123 更新时间:2023-11-28 03:46:33 25 4
gpt4 key购买 nike

我这样做对吗?

我正在尝试查找在名为 C:\Perl 的文件夹中发生的所有更改

在 ReadDirectoryChangesW 之后,它就卡在那里了。它没有前进。我是否遗漏了一些明显的东西?

我正在努力实现:How can I detect only deleted, changed, and created files on a volume?

每天一次,我想运行备份程序,它只会备份特定文件夹下发生更改的文件。

int _tmain(int argc, _TCHAR* argv[])
{
TCHAR szBuffer[640] = {0};
DWORD dwOffset = 0;
FILE_NOTIFY_INFORMATION* pInfo = NULL;
DWORD dwBytes;
HANDLE hFolder = CreateFile(L"C:\\Perl", FILE_LIST_DIRECTORY, FILE_SHARE_READ|FILE_SHARE_DELETE, NULL, OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, NULL);
cout<<"Hello"<<endl;
ReadDirectoryChangesW(hFolder, szBuffer, sizeof(szBuffer) / sizeof(TCHAR), FALSE, FILE_NOTIFY_CHANGE_FILE_NAME, &dwBytes, NULL, NULL);
cout<<"Done"<<endl;
do
{
// Get a pointer to the first change record...
pInfo = (FILE_NOTIFY_INFORMATION*) &szBuffer[dwOffset];

// ReadDirectoryChangesW processes filenames in Unicode. We will convert them to a TCHAR format...
TCHAR szFileName[MAX_PATH] = {0};

wcout<<pInfo->FileName<<"\t"<<pInfo->Action ;
//WideCharToMultiByte(CP_ACP, NULL, pInfo->FileName, pInfo->FileNameLength, szFileName, sizeof(szFileName) / sizeof(TCHAR), NULL, NULL);

// Perform your tests here...
if (pInfo->Action == FILE_ACTION_ADDED)
{
}

// More than one change may happen at the same time. Load the next change and continue...
dwOffset += pInfo->NextEntryOffset;
}
while (pInfo->NextEntryOffset != 0);

最佳答案

您正在以同步模式调用它,因此它不会返回,直到有更改报告。这是设计使然。

documentation 中的备注部分解释如何异步调用它。

听起来您想要的是查看自某个时间点以来是否发生了某些变化。如果是这样,这不是您正在寻找的 API。您可以迭代内容并检查每个文件的创建和修改时间戳。如果您想注意到删除,您必须跟踪上次找到的内容并检查这次是否仍然存在。

关于c++ - ReadDirectoryChangesW 不做任何事情 c++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7437049/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com