나는이 일을 올바르게하고 있습니까?ReadDirectoryChangesW는 아무 것도하지 않습니다. C++
나는 C라는 폴더에서 일어난 모든 변경 사항 찾기 위해 노력하고있다 : 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);
}
비동기로 만들려면 OVERLAPPED를 사용해야합니다. –