Хай всем! Использую код
#define BUF_SIZE 64*1024
void MonitoringThread(void* Directory)
{
AnsiString path=AnsiString((char*)Directory);
// (void*) path=Directory;
HANDLE hDir = CreateFile(path.c_str(), FILE_LIST_DIRECTORY, FILE_SHARE_READ|FILE_SHARE_DELETE,
NULL, OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS|FILE_FLAG_OVERLAPPED, NULL);
BYTE* pBuf = (BYTE*) GlobalAlloc(GPTR, BUF_SIZE);
DWORD br = 0;
while (1)
{ //снизу для файла!!
BOOL res = ReadDirectoryChangesW(hDir, pBuf, BUF_SIZE, TRUE,FILE_NOTIFY_CHANGE_FILE_NAME,&br, NULL, NULL);
FILE_NOTIFY_INFORMATION* pInfo = (FILE_NOTIFY_INFORMATION*) pBuf;
do
{
if (res)
if(pInfo->Action==FILE_NOTIFY_CHANGE_FILE_NAME)
{
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;
//ShowMessage(lpFileName);
}
} while(pInfo->NextEntryOffset);
}
}
в майне вызываю _beginthread(MonitoringThread,0,"C:\\1\\");
Так вот вопрос. Мне нужно отлавливать создание файла. Флаг
FILE_NOTIFY_CHANGE_FILE_NAME отвечает за создание/смену имени/удаление файла. Так вот, почему не работает переименование? (при попытки переименования винда ругается, что файл занят и ниче сделать с ним нельзя.)