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

Вниз

Изменение файла   Найти похожие ветки 

 
elserpiente   (2007-05-18 15:22) [0]

как в WinAPI можно узнать об изменении указанного файла?


 
clickmaker ©   (2007-05-18 15:26) [1]

FindFirstChangeNotification()
ReadDirectoryChangesW()


 
Сергей М. ©   (2007-05-18 15:27) [2]

см. ReadDirectoryChangesW


 
elserpiente   (2007-05-18 15:34) [3]

пасибо ;)


 
elserpiente   (2007-05-18 15:56) [4]

в ReadDirectoryChangesW второй параметр lpBuffer какого типа должен быть?
есть ли делфи аналог FILE_NOTIFY_INFORMATION?


 
Сергей М. ©   (2007-05-18 16:07) [5]


> параметр lpBuffer какого типа должен быть?


Pointer


> есть ли делфи аналог FILE_NOTIFY_INFORMATION?


PFileNotifyInformation = ^FILE_NOTIFY_INFORMATION;
FILE_NOTIFY_INFORMATION = packed record
 NextEntryOffset: DWORD;
 Action: DWORD;
 FileNameLength: DWORD;
 FileName: Array[0..0] Of WideChar;
end;


 
elserpiente   (2007-05-18 16:09) [6]


> FileName: Array[0..0] Of WideChar;

0..0 - что это?


 
SLoW.AlfaMoon.Com   (2007-05-18 16:14) [7]

0..0 - что это?

--- оригинальный способ задания массива любой размерности.


 
elserpiente   (2007-05-18 17:09) [8]

PFileNotifyInformation = ^FILE_NOTIFY_INFORMATION;
FILE_NOTIFY_INFORMATION = packed record
NextEntryOffset: DWORD;
Action: DWORD;
FileNameLength: DWORD;
FileName: Array[0..0] Of WideChar;
end;

.....

var
 hWnd: THandle;
 FNI: PFileNotifyInformation;
 BytesReturned: integer;

.....

 hWnd := FindFirstChangeNotification("c:\", False,   FILE_NOTIFY_CHANGE_FILE_NAME);
 new(FNI);
 if hWnd <> INVALID_HANDLE_VALUE then
 while true do
 begin
   ZeroMemory(FNI, sizeof(FILE_NOTIFY_INFORMATION));

   if WaitForSingleObject(hWnd, 500) = WAIT_OBJECT_0 then
   begin
     ReadDirectoryChangesW(
       hWnd,
       FNI,
       sizeof(FNI),
       False,
       FILE_NOTIFY_CHANGE_FILE_NAME,
       @BytesReturned,
       nil, nil);
     if BytesReturned > 0 then
       Caption := "ok";

   end;
   FindNextChangeNotification(hWnd);
 end;

Создаю/удаляю файл, брейкопоинт срабатывает, однако, в FNI ничего нет? Чо не так


 
clickmaker ©   (2007-05-21 12:41) [9]

Parameters
hDirectory
[in] The handle to the directory to be monitored. This directory must be opened with the FILE_LIST_DIRECTORY access right.
(c) MSDN

и причем тут FindFirstChangeNotification?


 
Leonid Troyanovsky ©   (2007-05-21 18:55) [10]


> SLoW.AlfaMoon.Com   (18.05.07 16:14) [7]

> 0..0 - что это?

> --- оригинальный способ задания массива любой размерности.

Просто дословный перевод msdn: WCHAR FileName[1].

Задать же таким способом массив сейчас не удастся, скажем, в
turbo delphi: Constant expression violates subrange bounds (x1012)
при попытке обратится к ненулевому элементу.

Т.е., если хочется массив, то
1. объявлять надо FileName: Array[0..очень_большое_число_WCHAR] Of WideChar,
2. распределять для переменной типа PFileNotifyInformation столько,
сколько не жалко.
3. следить за превышением FileNameLength.

Только, в данном случае, оно не надо, бо для строки вполне достаточно
адреса ее начала (нулевого символа) и ее длины.

--
Regards, LVT.


 
SLoW.AlfaMoon.Com   (2007-05-22 09:31) [11]

Leonid Troyanovsky ©   (21.05.07 18:55) [10]

Как обстоят дела в Turbo Delphi, я не знаю. Но в Delphi 6-7 и ранее такой трюк срабатывает.

Т.е., я могу объявить что-то типа

SYSTEM_HANDLE_INFORMATION_EX=record
 dwCount: DWORD;
 Info: array[0..0] of SYSTEM_HANDLE_INFORMATION
end;

Пpи этом, получив как результат вызова ZwQuerySystemInformation данный буфер, могу обращаться к элементам массива Info, самолично следя за корректностью адресации. Если в Turbo Delphi такой возможности нет - это большое упущение.



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

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

Наверх




Память: 0.47 MB
Время: 0.047 c
3-1184424423
Spectrum
2007-07-14 18:47
2007.12.02
поиск


15-1193766687
@!!ex
2007-10-30 20:51
2007.12.02
где почитать про дебагинг под Delphi


2-1194350208
Nicolas
2007-11-06 14:56
2007.12.02
DBWebGrid сортировка и фильтрация


15-1193729620
pathfinder
2007-10-30 10:33
2007.12.02
Шифрование исполняемых файлов.


15-1194178514
andreoman
2007-11-04 15:15
2007.12.02
как читать чужиее смс





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский