Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Работа с ReadDirectoryChangesW

52K
15 ноября 2009 года
v-i.king
6 / / 10.11.2009
Здравствуйте! Очень нужна помощь! Есть вот такой код
Код:
...
#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;
}

Все отслеживается нормально кроме переименования/удаления файлов. В чем может быть проблема?
52K
15 ноября 2009 года
v-i.king
6 / / 10.11.2009
Спасибо за ссылки! Попытаюсь разобраться :)
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог