Chertenok.ru - все о программировании
Вход  |  Регистрация  |  Поиск 
Праздник
Через 3 дня :

День славянской письменности и культуры


Как отследить попытку удалить файл?
На страницу 1, 2  След.

Новая тема  Ответить  Печать Предыдущая тема  Следующая тема
Автор Сообщение
goshavt
Гость







СообщениеПт, 15-Окт-2004 23:17    Заголовок сообщения: Как отследить попытку удалить файл?
Цитата

Нужно отследить попытку удалить файл.
Для папок есть ICopyHook::CopyCallback, а что нибудь для файлов есть?
В начало
ДОБ
Гость







СообщениеПт, 26-Авг-2005 20:57 
Цитата

У меня есть книга в каторой про это расказоваетца но у меня чёто неполучяеца оставь емайл пошлю может у тебя получеца
В начало
goshavt
Гость







СообщениеСб, 27-Авг-2005 8:39 
Цитата

Книга в электронном ввиде или в бумажном? Если в электронном, то выложи куда нибудь для выкачки. Если в бумажном лучше всего отскани и перегони в текст этот кусок. Либо хотя бы пример скинь на goshavt(собака)mail.ru.
В начало
ДОБ
Гость







СообщениеПн, 29-Авг-2005 16:15 
Цитата

Цитата:

зарание извеняюсь за неграмотность

Вот короче код разберёшся напеши чё нетак (а мыло твоё goshavt@mail.ru. непашет)
Код:

var DirName : string;
procedure TSimpleThread.Execute;
var r: Cardinal;
fn : THandle;
begin
fn := FindFirstChangeNotificationtpChar(DirName),True,
FILE_NOTIFY_CHANGE_FILE_NAME);
repeat
r := WaitForSingleObject(fn,2000);
if r = WAIT_OBJECT_0 then
Forml.UpdateList;
if not FindNextChangeNotification(fn) then break;
until Terminated;
FindcioseChangeNotification(fn);
end;
На главной форме должны находиться компоненты, нужные для выбора
обследуемой папки, а также компонент TListBox, в который будут записы-
ваться имена файлов:
procedure TForml.ButtonlClick(Sender: TObject);
var dir : string;
begin
if SelectDirectory(dir,[],0) then
begin
Edit1.Text := dir;
DirName := dir;
end;
end;
procedure TForml.UpdateList;
var SearchRec: TSearchRec;
220 Часть II. Интерфейс и логика приложения
begin
ListBoxl.Clear;
FindFirst(Editl.Text+'\*.*', faAnyFile, SearchRec);
repeat
ListBoxl.Items.Add(SearchRec.Name);
until FindNext(SearchRec) <> 0;
FindClose(SearchRec);
end;

кароче я есчё знаю что надо сначяло оповестить венду о том что хочеш получять
сообщения это делоетца функцией findfirstchangenotification у неё 3 порамитра пер-
вый путь к папке за файлами которой ты хочеш следить второй true если ты хочеш
следить и за подпапками третий параметр флаг

file_notify_change_file_name будет сообщять о любых изменениях (перименование
создание удоление) файлов

file_notify_change_dir_name кароче тоже самое только с папками

file_notify_change_attributes изменение отребутов

file_notify_change_file_size изменение размера

file_notify_change_file_last_write изменение времени последней записи в файл

file_notify_change_security изменение дескриптов защиты

функция возрощяет хендел есле он равен invalid_handle_value значет ты гдето
наебался

примерно так
Код:

procedure TForm1.Button1Click(Sender: TObject);
var
File : THandle;
begin
File:=findfirstchangenotification('c:\q',false,file_notify_change_file_name);
File=invalid_handle_value then
begin
showmessage('ошипка');
exit;
end;

хендел будет меняца при каждом изменение в файловой сестеме и после
каждова сообщения нужно говарить венде о том что ты желаеш дальше
следить это делоеца функцией findnextchangenotification у неё один пора-
метр это хендел вызывать её вроде как надо после оброботке сообщения
есле больше нехочеш следить за файломи то вызываеш
findclosechangenotification у неё тоже один параметр хендел

есчё короче waitforsingleobject и waitformultipleobject они вроде как для
оброботке событий в разделе книги из которой я эту информацию выудил
обеснили что эти функции толе уже были описоны толи будут я поищю
разберёшся раньше напеши а во второй книги нашол тот моразмный код
что опесал выши вобще без обеснений
В начало
Пол:Муж Ktf
Администратор


Возраст: 32
Знак зодиака: Рак
Зарегистрирован: 15.05.2005
Сообщения: 1502
Откуда: localhost
СообщениеПн, 29-Авг-2005 16:44 
Цитата

в дополнение к вышесказанному:
приведенный код позволяет установить аудит файла/каталога, но, к сожалению, не предоставляет возможности повлиять на результат выполнения операции.

зы: ДОБ, я тебя умоляю, перестань коверкать русский язык!
В начало
Посмотреть профиль Отправить личное сообщение
goshavt
Гость







СообщениеПн, 29-Авг-2005 18:48 
Цитата

Извини, не воспринимай как замечание, но:

Код вполне работоспособный и правильный по логике, а вот по синтаксису он даже компилиться не будет.

Цитата:
приведенный код позволяет установить аудит файла/каталога, но, к сожалению, не предоставляет возможности повлиять на результат выполнения операции.

Совершенно согласен, а требуется как раз при надобности запретить это сделать. А это похоже можна сделать только на уровне драйверов...

PS. Мыло работает, я только что проверял. Может опять ошибся Wink.
В начало
ДОБ
Гость







СообщениеПн, 29-Авг-2005 19:26 
Цитата

Цитата:

Код вполне работоспособный и правильный по логике, а вот по синтаксису он даже компилиться не будет.

goshavt может подрехтуеш ево и кинеш сюда а то у меня неполучяетца
В начало
ДОБ
Гость







СообщениеПн, 29-Авг-2005 21:04 
Цитата

Код:

procedure TForm1.Button1Click(Sender: TObject);
var
File1 : THandle;
r: Cardinal;
SearchRec: TSearchRec;
begin
File1:=findfirstchangenotification('c:\q',false,file_notify_change_file_name);
if File1=invalid_handle_value then
begin
showmessage('ошипка');
exit;
end;
r:=waitforsingleobject(File1,50000);
if r = WAIT_OBJECT_0 then
begin
FindFirst('c:\q\*.*', faAnyFile, SearchRec);
repeat
ListBox1.Items.Add(SearchRec.Name);
until FindNext(SearchRec) <> 0;
FindClose(SearchRec);
end;
end;
В начало
goshavt
Гость







СообщениеВт, 30-Авг-2005 20:24 
Цитата

Зайди и скачай рабочий пример по ссылке http://rapidshare.de/files/4541249/notif.rar.html,

Если не знаешь как оттуда скачать смотри http://clubrus.kulichki.net/skachat.html

Проект написан DELPHI 2005, но исходный текст должен работать на любой версии.
В начало
Weiss
Гость







СообщениеПн, 10-Окт-2005 15:10 
Цитата

Напишите пожалуста пример как...
кпримеру если пользователь удаляет ярлык значит происходит какое то событие и если он его удалил программа производит какие либо действия.
В начало
goshavt
Гость







СообщениеПн, 10-Окт-2005 16:25 
Цитата

to Weiss
Как правило вся эта кухня нужна для обновления списка файлов и папок. То есть после получения события, которое вы ожидаете, просто обновляете содержимое списка. Ну а придумать другое применение тоже можно, все зависит от фантазии и надобности.
Но чего сделать нельзя так это запретить чего-то, посколько вы получаете уведомление о уже призошедшем событии.
В начало
Пол:Муж NikotiN
Розовый мамонт


Возраст: 26
Знак зодиака: Овен
Зарегистрирован: 18.03.2005
Сообщения: 2137

СообщениеПн, 10-Окт-2005 19:26 
Цитата

можно виндовскую функцию удаления перекрыть своей ))
некрасиво конечно, но безотказно...если знать что перекрыть
В начало
Посмотреть профиль Отправить личное сообщение
ДОБ
Гость







СообщениеПн, 10-Окт-2005 20:14 
Цитата

NikotiN А в коде
В начало
Пол:Муж NikotiN
Розовый мамонт


Возраст: 26
Знак зодиака: Овен
Зарегистрирован: 18.03.2005
Сообщения: 2137

СообщениеПн, 10-Окт-2005 21:19 
Цитата

в коде никак.
ищешь в памяти функцию, затираешь её своей. всё.
В начало
Посмотреть профиль Отправить личное сообщение
Genuine_euRo
Новичок




Зарегистрирован: 06.06.2006
Сообщения: 22

СообщениеСр, 07-Июн-2006 22:57 
Цитата

Интересная тема :)
Хотелось бы все таки знать, как можно проследить чтобы файл (определенный) нельзя было скопировать/переместить? :)
В начало
Посмотреть профиль Отправить личное сообщение Отправить e-mail
Показать сообщения:   
Страница 1 из 2 На страницу 1, 2  След.
Перейти:  
Новая тема  Ответить  Печать

Вы можете начинать темы
Вы можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете присоединять файлы в этом форуме
Вы можете скачивать файлы в этом форуме
хостинг от .masterhost 
Rambler's Top100