Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2003.07.28;
Скачать: [xml.tar.bz2];

Вниз

ReadDirectoryChangesW   Найти похожие ветки 

 
Titan   (2003-05-24 11:09) [0]

Очень хотелось бы увидель пример правильной работы с данной функцией, т.е. как сформировать входные параметры, как проанализировать результаты работы. Help я читал (кстати, в D6 структура FILE_CHANGE_INFORMATION даже не описана, я ее по си-ному прототиту сам описал, может в этом и проблема, что не тот размер структуры). Она у меня в отдельном потоке работает, но все время False возвращает :-( Если не сложно, то вышлите пример исходника на мыло, а то времени в инете мало ;-(


 
AndreiR   (2003-05-24 14:04) [1]

Писал давно, много сходу не припоминаю :)
Надеюсь разберешься...
ПС: addRecord - моя процедура, которую нужно выполнить в порцессе работы нитки.

type
_FILE_NOTIFY_INFORMATION = record
NextEntryOffset : DWORD;
Action : DWORD;
FileNameLength : DWORD;
FileName : WCHAR;
end;
{$EXTERNALSYM _FILE_NOTIFY_INFORMATION}
TFileNotifyInformation = _FILE_NOTIFY_INFORMATION;
FILE_NOTIFY_INFORMATION = _FILE_NOTIFY_INFORMATION;
{$EXTERNALSYM _FILE_NOTIFY_INFORMATION}

.....

procedure TViewerThread.Execute;
var
FNI: ^FILE_NOTIFY_INFORMATION;
pBuffer,
pCurr: Pointer;
dwBufferLength: DWORD;
dwBytesReturned: DWORD;
pSrcFileName: PWCHAR;
pDstFileName: PWCHAR;
dwDstFileNameLength: DWORD;
FileName: String;
begin
while not Terminated do begin
dwBufferLength := 1024;
pBuffer := HeapAlloc(GetProcessHeap(), 0, dwBufferLength);
ZeroMemory(pBuffer, dwBufferLength);
if ReadDirectoryChangesW(
hDir,
pBuffer,
dwBufferLength,
TRUE,
FILE_NOTIFY_CHANGE_LAST_WRITE Or
FILE_NOTIFY_CHANGE_FILE_NAME Or
FILE_NOTIFY_CHANGE_DIR_NAME,
@dwBytesReturned,
nil,
nil
) then begin
pCurr := pBuffer;
while true do begin
FNI := pCurr;
if FNI^.FileNameLength > 0 then begin
pSrcFileName := @FNI^.FileName;
dwDstFileNameLength := FNI^.FileNameLength + SizeOf(WideChar);
pDstFileName := HeapAlloc(GetProcessHeap(), 0, dwDstFileNameLength);
ZeroMemory(pDstFileName, dwDstFileNameLength);
CopyMemory(pDstFileName, pSrcFileName, FNI^.FileNameLength);
FileName := WideCharToString(pDstFileName);
HeapFree(GetProcessHeap(), 0, pDstFileName);
end;

if not Terminated then begin
self.FileName := ansiLowerCase(RealPath + FileName);
case FNI^.Action of
FILE_ACTION_ADDED:
begin
index := true;
Synchronize(addRecord);
end;
FILE_ACTION_REMOVED:
begin
index := false;
Synchronize(addRecord);
end;
FILE_ACTION_MODIFIED:
begin
index := true;
Synchronize(addRecord);
end;
FILE_ACTION_RENAMED_OLD_NAME:
begin
index := false;
Synchronize(addRecord);
end;
FILE_ACTION_RENAMED_NEW_NAME:
begin
index := true;
Synchronize(addRecord);
end;
end;
end;
if FNI^.NextEntryOffset = 0 then
Break
else
Inc(PChar(pCurr), FNI^.NextEntryOffset);

end;
end else
ExitProcess(GetLastError());

HeapFree(GetProcessHeap(), 0, pBuffer);
end;
end;


 
Titan   (2003-05-26 06:54) [2]

Спасибо за ответ, с проблемой несрабатывания функции я и сам разобрался (просто неправильно папку открывал [hDir], и результате ничего не работало ;-(, но потом GetLastError давал ноль, но количество возвращенных байт = 0, это похоже я буфер слишком маленький делал... Сегодня попробую ваш вариант, надеюсь, сработает, еще раз спасибо, что откликнулись.



Страницы: 1 вся ветка

Форум: "WinAPI";
Текущий архив: 2003.07.28;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.45 MB
Время: 0.009 c
3-91688
galina
2003-07-07 13:32
2003.07.28
работа с бд


1-91713
VID
2003-07-14 23:39
2003.07.28
Дельфи 5 или код ?


14-91830
Soft
2003-07-10 16:09
2003.07.28
Что такое язык программирования?


1-91741
Igit
2003-07-13 12:34
2003.07.28
Извлечение ресурсов.


14-91824
Soft
2003-07-10 14:44
2003.07.28
Как на С, не C++ полуить место, занимаемое структурой?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский