Вопрос № 148849: Сталкивался ли кто-нибудь с отслеживанием копирования/перемещения файлов, например, на сменные носители? Пробовал: ICopyHook - работает только с папками, FindFirstChangeNotification - не позволяет дифференцировать события, сообщения Windows - не рабо...
Вопрос № 148877: Здраствуйте ув. Эксперты. Такой вопрос. Как можна узнать дату изменения файла (ну или другой атрибут фала), зная путь к нему. Файл в папке один. Если можна,
то наиболее проще. Заранее спасибо....Вопрос № 148883: Здравствуйте! Каким образом можно узнать, работает ли еще приложение, запущенное например при помощи ShellExecute?...
Вопрос № 148.849
Сталкивался ли кто-нибудь с отслеживанием копирования/перемещения файлов, например, на сменные носители? Пробовал: ICopyHook - работает только с папками, FindFirstChangeNotification - не позволяет дифференцировать события, сообщения Windows - не работают; надежда на zwCreateFile, но по отзывам критикуют, что на низком уровне и используя ядро. Может, есть альтернативы?
Отвечает: Genia007
Здравствуйте, Козьмин Сергей Олегович! Попробуйте такую процедуру, у меня в проги работает как часы.
Приложение:
Ответ отправил: Genia007 (статус: 10-ый класс)
Ответ отправлен: 30.10.2008, 11:11
Как сказать этому эксперту "спасибо"?
Отправить SMS#thank 148849 на номер 1151 (Россия) | Еще номера >>
Переслать WebMoney: руб.
Вам помогли? Пожалуйста, поблагодарите эксперта за это!
Вопрос № 148.877
Здраствуйте ув. Эксперты. Такой вопрос. Как можна узнать дату изменения файла (ну или другой атрибут фала), зная путь к нему. Файл в папке один. Если можна, то наиболее проще. Заранее спасибо.
Отвечает: Абельхарисов Руслан/Marked One
Здравствуйте, Пустовойтенко Виктор Григорьев! Дату изменения/создания/последнего обращения к файлу можно получить с помощью функции GetFileInformationByHandle(). В Delphi она объявлена в модуле Windows: function GetFileInformationByHandle(hFile: THandle; var lpFileInformation: TByHandleFileInformation): BOOL; hFile - хэндл файла, полученный с помощью CreateFile(). lpFileInformation - структура, в которую функция сохранит информацию о файле. Вот описание структуры TByHandleFileInformation:
Тут как мы видим достаточно много информации, но нас интерисует только поля: ftCreationTime, ftLastAccessTime, ftLastWriteTime. Они содержат даты создания/изменения/последнего обращения к файлу. Эти поля имеют тип TFileTime, который не очень пригоден для вывода на экран. Чтобы вывести его надо переконвертировать в тип TDateTime с помощью функции FileTim
eToDateTime():
Код:
function FileTimeToDateTime(FileTime: TFileTime): TDateTime; var ModifiedTime: TFileTime; SystemTime: TSystemTime; begin Result := 0; if (FileTime.dwLowDateTime = 0) and (FileTime.dwHighDateTime = 0) then Exit; try
FileTimeToLocalFileTime(FileTime, ModifiedTime); FileTimeToSystemTime(ModifiedTime, SystemTime); Result := SystemTimeToDateTime(SystemTime); except Result := Now; // Something to return in case of error end; end;
В приложении код консольной программы, которая выводит даты создания, обращения, записи файла. Вот еще один способ(URL >
>источник):
{********* получить контрольную сумму файла ************************************} function
getCRC(fname:String):DWORD; var dwFileChecksum, dwRealChecksum:DWORD; begin MapFileAndCheckSum(PChar(fname), dwFileChecksum, dwRealChecksum); result := dwRealChecksum; end; //-------- Преобразовать время файла в локальное время ------------------------- function getLocalTime(ft:FILETIME):TDateTime; var sTime,lTime:SYSTEMTIME; begin FileTimeToSystemTime(ft,sTime); SystemTimeToTzSpecificLocalTime(nil,sTime,lTime); result := SystemTimeToDateTime(lTime); end; //-----------
Получить информацию о файле -------------------------------------- procedure GenInfoFile(const fname:String;var str_info:String); var fi:WIN32_FILE_ATTRIBUTE_DATA; begin if(GetFileAttributesEx(PChar(fname),GetFileExInfoStandard,@fi)) then begin str_info := Format('Создан: %s'#13,[DateTimeToStr(getLocalTime(fi.ftCreationTime))]); str_info := str_info+Format('Время обращения: %s'#13,[DateTimeToStr(get
LocalTime(fi.ftLastAccessTime))]); str_info := str_info+Format('Вребя записи: %s'#13,[DateTimeToStr(getLocalTime(fi.ftLastWriteTime))]); str_info := str_info+Format('Размер: %.2f кб'#13,[fi.nFileSizeLow/1024.0]); str_info := str_info+Format('Контрольная сумма: %X'#13,[getCRC(fname)]); end; end; //------------------------------------------------------------------------------ procedure TForm1.SpeedButton1Click(Sender: TObject); var s:String; begin
if OpenDialog1.Execute then begin Edit1.Text := OpenDialog1.FileName; RichEdit1.Clear; GenInfoFile(Edit1.Text,s); RichEdit1.Text := s; end; end;
--------- не получается там - где не пробуют
Ответ отправил: Виктор Пырлик (статус: Профессионал) Россия, Екатеринбург Тел.: 89043822027 ICQ: 490191733 ---- Ответ отправлен: 29.10.2008, 21:16
Как сказать этому эксперту "спасибо"?
Отправить SMS#thank 148877 на номер 1151 (Россия) | Еще номера >>
Переслать WebMoney: руб.
Вам помогли? Пожалуйста, поблагодарите эксперта за это!
Оценка за ответ: 5
Отвечает: Сазонов Михаил Владимирович
Здравствуйте, Пустовойтенко Виктор Григорьев! В принципе Вам уже ответили. Просто еще один вариант, выбирайте! Удачи.
* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.
Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!
Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.
Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.
Скажите "спасибо" эксперту, который помог Вам!
Отправьте СМС-сообщение с тестом #thank НОМЕР_ОТВЕТА
на короткий номер 1151 (Россия)
Номер ответа и конкретный текст СМС указан внизу каждого ответа.
* Стоимость одного СМС-сообщения от 7.15 руб. и зависит от оператора сотовой связи.
(полный список тарифов)
** При ошибочном вводе номера ответа или текста #thank услуга считается оказанной, денежные средства не возвращаются.
*** Сумма выплаты эксперту-автору ответа расчитывается из суммы перечислений на портал от биллинговой компании.