Привет всем.
Допустим, есть файл или папка, путь и имя известны. Нужно отловить событие переименования этого файла или папки и получить новое имя. Такое возможно?
type
PFileNotifyInformation = ^TFileNotifyInformation;
TFileNotifyInformation = record
NextEntryOffset: DWORD;
Action: DWORD;
FileNameLength: DWORD;
FileName: array [0..MAX_PATH - 1] of WideChar;
end;
var writepath:string;//нужное мне имя папки
Procedure monitor1(direc:string);
const
Filter = FILE_NOTIFY_CHANGE_FILE_NAME or
FILE_NOTIFY_CHANGE_DIR_NAME or
FILE_NOTIFY_CHANGE_CREATION or
FILE_NOTIFY_CHANGE_SECURITY;
var
Dir: THandle;
Notify: TFileNotifyInformation;
BytesReturned: DWORD;
newname:string;
begin
Dir := CreateFile(pchar(direc), GENERIC_READ,
FILE_SHARE_READ or FILE_SHARE_WRITE or FILE_SHARE_DELETE,
nil, OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, 0);
if Dir <> INVALID_HANDLE_VALUE then
try
if not ReadDirectoryChangesW(Dir, @Notify, SizeOf(TFileNotifyInformation),
False, Filter, @BytesReturned, nil, nil) then
raise Exception.Create(SysErrorMessage(GetLastError))
else
case Notify.Action of
FILE_ACTION_RENAMED_NEW_NAME: newname:=notify.FileName;
end;
renamefile(newname,writepath);
finally
CloseHandle(Dir);
end;
end;
...
begin
monitor(writepath);
end.
if not ReadDirectoryChangesW(hDir, lpBuf, BUFFER, true, Filter, @cbReturn, nil, nil) then
begin
ShowMessage(SysErrorMessage(GetLastError)); // Вот так
Break;
end;