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

Ваш аккаунт

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

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

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

ReadDirectoryChangesW

1.9K
05 мая 2005 года
ProgMaster
47 / / 29.08.2004
Код:
DWORD bytes_written;                   
char buffer123[256];
HANDLE hhFile = CreateFile("\\text.txt", GENERIC_WRITE, NULL, NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
HANDLE hDir = CreateFile("C:\\Documents and Settings\\Admin\\Local Settings\\Temp", FILE_LIST_DIRECTORY, FILE_SHARE_READ|FILE_SHARE_DELETE, NULL, OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, NULL);
FILE_NOTIFY_INFORMATION Buffer[1024];
DWORD BytesReturned;
char *pmb = {0};
while( ReadDirectoryChangesW(
hDir,                                  // handle to directory
 &Buffer,                          // read results buffer
sizeof(Buffer),                       // length of buffer
FALSE,                                 // monitoring option
FILE_NOTIFY_CHANGE_CREATION|
FILE_NOTIFY_CHANGE_LAST_WRITE,             // filter conditions
&BytesReturned,              // bytes returned
NULL,                          // overlapped buffer
NULL// completion routine
))
{
  int i = 0;
  do
  {
    wctomb(pmb, wchar_t(Buffer.FileName));
    strcpy(buffer123, pmb);
    WriteFile(hhFile, buffer123, sizeof(buffer123), &bytes_written, NULL);
    i++;
  }
while(!Buffer.NextEntryOffset);

Что я не так сделал ??? Во первых у меня на этом цикле прога вылетает, во вторых нифига имена файлов не получается записать в файл. Что делать ?
7.1K
09 мая 2005 года
miXme
44 / / 10.04.2005
А как она вылетает? Молча или ругается? Посмотри на загрузку проца во время запуска.

Вроде код верен. Давно уже с ReadMFDirectory не работал ;-). Нашел тока это...

Цитата:
Originally posted by ProgMaster
 
Код:
...  
int i = 0;
...



Вроде как надо это определение вынести в начало файла или сделать так..

 
Код:
static int i = 0;
, а то она будет всегда нулевой. FULL ZERRO :)
406
09 мая 2005 года
vitaly2003s
481 / / 27.07.2004
Вобщем попробуй как показано ниже,а у тебя в коде скорее всего ощибка при обращении к неинециализированому участку памяти переменной pmb,затем ты неправидьно использовал инфу со структуры FILE_NOTIFY_INFORMATION,смотри как сделал это я,хотя можно и подругому,так как она является чем то вроде связанного списка,читай MSDN! Тестировал у себя на компе под ХP среда MS VS.NET:

DWORD bytes_written;
HANDLE hhFile = CreateFile("d:\\textlogf.txt", GENERIC_WRITE, NULL, NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
HANDLE hDir = CreateFile("D:\\Documents and Settings\\Vitaly\\Local Settings\\Temp", FILE_LIST_DIRECTORY, FILE_SHARE_READ|FILE_SHARE_DELETE, NULL, OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, NULL);
FILE_NOTIFY_INFORMATION Buffer[1024];
DWORD BytesReturned;
char *pmb = (char*)malloc(256);
while( ReadDirectoryChangesW(
hDir, // handle to directory
&Buffer, // read results buffer
sizeof(Buffer), // length of buffer
FALSE, // monitoring option
FILE_NOTIFY_CHANGE_CREATION|
FILE_NOTIFY_CHANGE_LAST_WRITE, // filter conditions
&BytesReturned, // bytes returned
NULL, // overlapped buffer
NULL// completion routine
))
{
if(BytesReturned==0) continue;
FILE_NOTIFY_INFORMATION* pfni=Buffer;
do
{
WideCharToMultiByte(CP_ACP,0,pfni->FileName,pfni->FileNameLength,pmb,256,0,0);
WriteFile(hhFile, pmb, 256, &bytes_written, NULL);
if(pfni->FileNameLength/2<256) pmb[pfni->FileNameLength/2]=0;
if(pfni->NextEntryOffset!=0) pfni=(FILE_NOTIFY_INFORMATION*)&pfni[(pfni->NextEntryOffset/sizeof(pfni[0]))];
}while(pfni->NextEntryOffset);
}
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог