Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RusFAQ.ru: Программирование на Delphi


Хостинг Портала RusFAQ.ru:
MosHoster.ru - Профессиональный хостинг на Windows 2008

РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

Чемпионы рейтинга экспертов в этой рассылке

Шичко Игорь
Статус: Студент
Рейтинг: 260
∙ повысить рейтинг >>
Николай Владимирович / Н.В.
Статус: Академик
Рейтинг: 63
∙ повысить рейтинг >>
Genia007
Статус: 10-ый класс
Рейтинг: 61
∙ повысить рейтинг >>

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / Delphi

Выпуск № 1221
от 03.11.2008, 16:35

Администратор:Калашников О.А.
В рассылке:Подписчиков: 404, Экспертов: 53
В номере:Вопросов: 3, Ответов: 5

Нам важно Ваше мнение об этой рассылке.
Оценить этот выпуск рассылки >>

Вопрос № 148849: Сталкивался ли кто-нибудь с отслеживанием копирования/перемещения файлов, например, на сменные носители? Пробовал: ICopyHook - работает только с папками, FindFirstChangeNotification - не позволяет дифференцировать события, сообщения Windows - не рабо...


Вопрос № 148877: Здраствуйте ув. Эксперты. Такой вопрос. Как можна узнать дату изменения файла (ну или другой атрибут фала), зная путь к нему. Файл в папке один. Если можна, то наиболее проще. Заранее спасибо....
Вопрос № 148883: Здравствуйте! Каким образом можно узнать, работает ли еще приложение, запущенное например при помощи ShellExecute?...

Вопрос № 148.849
Сталкивался ли кто-нибудь с отслеживанием копирования/перемещения файлов, например, на сменные носители? Пробовал: ICopyHook - работает только с папками, FindFirstChangeNotification - не позволяет дифференцировать события, сообщения Windows - не работают; надежда на zwCreateFile, но по отзывам критикуют, что на низком уровне и используя ядро. Может, есть альтернативы?
Отправлен: 29.10.2008, 08:16
Вопрос задал: Козьмин Сергей Олегович (статус: 1-ый класс)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: Genia007
Здравствуйте, Козьмин Сергей Олегович!
Попробуйте такую процедуру, у меня в проги работает как часы.

Приложение:

Ответ отправил: Genia007 (статус: 10-ый класс)
Ответ отправлен: 30.10.2008, 11:11

Как сказать этому эксперту "спасибо"?
  • Отправить SMS #thank 148849 на номер 1151 (Россия) | Еще номера >>
  • Переслать WebMoney: руб.
  • Вам помогли? Пожалуйста, поблагодарите эксперта за это!


    Вопрос № 148.877
    Здраствуйте ув. Эксперты. Такой вопрос. Как можна узнать дату изменения файла (ну или другой атрибут фала), зная путь к нему. Файл в папке один. Если можна, то наиболее проще. Заранее спасибо.
    Отправлен: 29.10.2008, 13:35
    Вопрос задал: Пустовойтенко Виктор Григорьев (статус: Посетитель)
    Всего ответов: 3
    Мини-форум вопроса >>> (сообщений: 0)

    Отвечает: Абельхарисов Руслан/Marked One
    Здравствуйте, Пустовойтенко Виктор Григорьев!
    Дату изменения/создания/последнего обращения к файлу можно получить с помощью функции GetFileInformationByHandle(). В Delphi она объявлена в модуле Windows:
    function GetFileInformationByHandle(hFile: THandle; var lpFileInformation: TByHandleFileInformation): BOOL;
    hFile - хэндл файла, полученный с помощью CreateFile().
    lpFileInformation - структура, в которую функция сохранит информацию о файле.
    Вот описание структуры TByHandleFileInformation:
    Код:
    TByHan
     dleFileInformation = _BY_HANDLE_FILE_INFORMATION;  
    _BY_HANDLE_FILE_INFORMATION = record
    dwFileAttributes: DWORD;
    //Дата создания...
    ftCreationTime: TFileTime;
    //...последнего обращения...
    ftLastAccessTime: TFileTime;
    //...записи
    ftLastWriteTime: TFileTime;

    dwVolumeSerialNumber: DWORD;
    nFileSizeHigh: DWORD;
    nFileSizeLow: DWORD;
    nNumberOfLinks: DWORD;
    nFileIndexHigh: DWORD;
    nFileIndexLow: DWORD;

    Тут как мы видим достаточно много информации, но нас интерисует только поля: 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 > >источник):
    Код:

    var
    SR: TSearchRec;
    FileName: string;
    LastWrite, LastAccess, CreateTime: TDateTime;
    begin
    FileName:='ИмяФайла';
    FindFirst(FileName, faArchive, SR);
    LastWrite := FileTimeToDateTime(SR.FindData.ftLastWriteTime);
    LastAccess := FileTimeToDateTime(SR.FindData.ftLastAccessTime);
    CreateTime := FileTimeToDateTime(SR.FindData.ftCreationTime);
    FindClose(SR);
    ShowMessage('Имя файла: ' + FileName + #13#13+
    'Создан: ' + DateTimeToStr(CreateTime) + #13#13+
    'Изменен: ' + DateTimeToStr(LastWrite) + #13#13+
    'Последний доступ: ' + DateTimeToStr(LastAccess))
    end;

    Удачи!!!

    Приложение:

    Ответ отправил: Абельхарисов Руслан/Marked One (статус: Студент)
    Ответ отправлен: 29.10.2008, 17:55

    Как сказать этому эксперту "спасибо"?
  • Отправить SMS #thank 148877 на номер 1151 (Россия) | Еще номера >>
  • Переслать WebMoney: руб.
  • Вам помогли? Пожалуйста, поблагодарите эксперта за это!

    Оценка за ответ: 5
    Комментарий оценки:
    Круто! Очень точно и исчерпывающе. Огромное спасибо.


    Отвечает: Виктор Пырлик
    Здравствуйте, Пустовойтенко Виктор Григорьев!

    вот простой пример.
    только, подключите Imagehlp. т.е. в секцию uses добавьте модуль Imagehlp. например так:
    Код:

    unit Unit1;

    interface


    uses
    Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Buttons,Imagehlp, ComCtrls;


    Код:

    {********* получить контрольную сумму файла ************************************}
    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


    Отвечает: Сазонов Михаил Владимирович
    Здравствуйте, Пустовойтенко Виктор Григорьев!
    В принципе Вам уже ответили. Просто еще один вариант, выбирайте!
    Удачи.

    Приложение:

    Ответ отправил: Сазонов Михаил Владимирович (статус: 2-ой класс)
    Ответ отправлен: 30.10.2008, 09:53

    Как сказать этому эксперту "спасибо"?
  • Отправить SMS #thank 148877 на номер 1151 (Россия) | Еще номера >>
  • Переслать WebMoney: руб.
  • Вам помогли? Пожалуйста, поблагодарите эксперта за это!


    Вопрос № 148.883
    Здравствуйте! Каким образом можно узнать, работает ли еще приложение, запущенное например при помощи ShellExecute?
    Отправлен: 29.10.2008, 14:55
    Вопрос задал: Jaybob (статус: Посетитель)
    Всего ответов: 1
    Мини-форум вопроса >>> (сообщений: 3)

    Отвечает: Genia007
    Здравствуйте, Jaybob!
    Нашёл такой вот код, возможно он Вам подойдёт:

    Приложение:

    Ответ отправил: Genia007 (статус: 10-ый класс)
    Ответ отправлен: 30.10.2008, 11:19

    Как сказать этому эксперту "спасибо"?
  • Отправить SMS #thank 148883 на номер 1151 (Россия) | Еще номера >>
  • Переслать WebMoney: руб.
  • Вам помогли? Пожалуйста, поблагодарите эксперта за это!


    Вы имеете возможность оценить этот выпуск рассылки.
    Нам очень важно Ваше мнение!
    Оценить этот выпуск рассылки >>

    Отправить вопрос экспертам этой рассылки

    Приложение (если необходимо):

    * Код программы, выдержки из закона и т.п. дополнение к вопросу.
    Эта информация будет отображена в аналогичном окне как есть.

    Обратите внимание!
    Вопрос будет отправлен всем экспертам данной рассылки!

    Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
    экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


    Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
    Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.

    Скажите "спасибо" эксперту, который помог Вам!

    Отправьте СМС-сообщение с тестом #thank НОМЕР_ОТВЕТА
    на короткий номер 1151 (Россия)

    Номер ответа и конкретный текст СМС указан внизу каждого ответа.

    Полный список номеров >>

    * Стоимость одного СМС-сообщения от 7.15 руб. и зависит от оператора сотовой связи. (полный список тарифов)
    ** При ошибочном вводе номера ответа или текста #thank услуга считается оказанной, денежные средства не возвращаются.
    *** Сумма выплаты эксперту-автору ответа расчитывается из суммы перечислений на портал от биллинговой компании.


    © 2001-2008, Портал RusFAQ.ru, Россия, Москва.
    Авторское право: ООО "Мастер-Эксперт Про"
    Техподдержка портала, тел.: +7 (926) 535-23-31
    Хостинг: "Московский хостер"
    Поддержка: "Московский дизайнер"
    Авторские права | Реклама на портале

    ∙ Версия системы: 5.9 от 29.10.2008

    Яндекс Rambler's Top100
    RusFAQ.ru | MosHoster.ru | MosDesigner.ru
    RusIRC.ru | Kalashnikoff.ru | RadioLeader.ru

    В избранное