...
#include <windows.h>
#include <stdio.h>
#include <shellapi.h>
...
void __fastcall TForm1::Button1Click(TObject *Sender)
{
HANDLE hDir = CreateFile("D:\\TEMP\\",
FILE_LIST_DIRECTORY,
FILE_SHARE_READ|FILE_SHARE_DELETE|FILE_SHARE_WRITE,
NULL,
OPEN_EXISTING,
FILE_FLAG_BACKUP_SEMANTICS,
NULL);
BYTE outBuffer[5120];
VOID *pBuf = (BYTE*)&outBuffer;
FILE_NOTIFY_INFORMATION InfoNotify1;
DWORD InfoNotify;
BOOL ResultReadChange;
DWORD outSize = sizeof(outBuffer);
//while(1)
int i=1;
if (i==1)
{ ResultReadChange = ReadDirectoryChangesW(hDir,
&outBuffer,
outSize,
TRUE,
FILE_NOTIFY_CHANGE_CREATION|
FILE_NOTIFY_CHANGE_LAST_WRITE|
FILE_NOTIFY_CHANGE_SIZE|
FILE_NOTIFY_CHANGE_ATTRIBUTES|
FILE_NOTIFY_CHANGE_DIR_NAME|
FILE_NOTIFY_CHANGE_FILE_NAME,
&InfoNotify,
NULL,
NULL);
if ( ResultReadChange )
{ FILE_NOTIFY_INFORMATION* pInfo = (FILE_NOTIFY_INFORMATION*) pBuf;
if (pInfo->Action == FILE_ACTION_ADDED ||
pInfo->Action == FILE_ACTION_REMOVED ||
pInfo->Action == FILE_ACTION_MODIFIED ||
(pInfo->Action == FILE_ACTION_RENAMED_OLD_NAME &&
pInfo1->Action == FILE_ACTION_RENAMED_NEW_NAME))
{
while(1)
{char lpFileName[MAX_PATH];
WideCharToMultiByte(CP_ACP,
0,
pInfo->FileName,
pInfo->FileNameLength/2,
lpFileName,
MAX_PATH,
0,
0);
lpFileName[pInfo->FileNameLength/2] = 0;
pInfo += pInfo->NextEntryOffset;
AnsiString temp_patch = "D:\\TEMP";
Label1->Caption = temp_patch + "\\" + AnsiString(lpFileName);
...
// тут операции с файлами
...
if (!pInfo->NextEntryOffset) break;}}
}
}
i=0;
}
Работа с ReadDirectoryChangesW
Код:
Все отслеживается нормально кроме переименования/удаления файлов. В чем может быть проблема?
Спасибо за ссылки! Попытаюсь разобраться :)