Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Инфа о файле, EInvalidOP и.. 
:(
    Опции темы
Ripper
Дата 23.9.2004, 18:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Lonely soul...
**


Профиль
Группа: Участник
Сообщений: 920
Регистрация: 30.6.2004
Где: г. Москва

Репутация: 1
Всего: 23



Код

Type TFileInfo=record
Exists:boolean;//true если файл найден  

Name:String; //имя файла с расширением  

ShortName:String;//DOS 8.3 имя файла  

NameNoExt:String;//имя файла без расширения  

Extension:string;//расширение файла  

AssociatedFile:string;//программа с которой ассоциирован файл  

Path:string;// путь к файлу  

ShortPath:string;// DOS 8.3 путь файла  

Drive:string;// дисковод на котором находится файл  

CreateDate:TDateTime; //время когда файл создан  

Size:Int64;// размер файла (работает для файлов и больше 2Gb)  

Attributes:record //нали?ие/отсутствие системных атрибутов  

 
ReadOnly:boolean;  

Hidden:boolean;  

System:boolean;  

Archive:boolean;  

 
end;  

ModifyDate:TDateTime; // время последнего изменения файла  

LastAccessDate:TDateTime; // дата последнего открытия файла  

 
end;  

 


Function ReadFileInfo(FileName:string):TFileInfo;
var ts:TSearchRec;  

 

Function FileTime2DateTime(FT:_FileTime):TDateTime;  

 
var FileTime:_SystemTime;  

 
begin  

 
FileTimeToLocalFileTime(FT, FT);  

FileTimeToSystemTime(FT,FileTime);  

Result:=EncodeDate(FileTime.wYear, FileTime.wMonth, FileTime.wDay)+  

EncodeTime(FileTime.wHour, FileTime.wMinute, FileTime.wSecond, FileTime.wMilliseconds);  

 
end;  

 

Function AssociatedFile(FileExt:string):string;  

 
var key:string;  

 
begin  

 
With TRegistry.create do  

 
try  

 
RootKey:=HKEY_CLASSES_ROOT;  

OpenKey(FileExt, false);  

Key:=ReadString('');  

CloseKey;  

OpenKey(key+'\Shell\open\command', false);  

result:=ReadString('');  

Closekey;  

 
finally  

 
free;  

 
end  

 
end;  

 

begin
Result.Name:=ExtractFileName(FileName);  

Result.Extension:=ExtractFileExt(FileName);  

Result.NameNoExt:=Copy(Result.Name,1,length(Result.Name)-length(Result.Extension));  

Result.Path:=ExtractFilePath(FileName);  

Result.Drive:=ExtractFileDrive(FileName);  

Result.ShortPath:=ExtractShortPathName(ExtractFilePath(FileName));  

if lowercase(Result.Extension)<>'.exe' then Result.AssociatedFile:=AssociatedFile(Result.Extension);  

if FindFirst(FileName, faAnyFile, ts)=0 then  

 
begin  

 
Result.Exists:=true;  

Result.CreateDate:=FileDateToDateTime(ts.Time);  

Result.Size:=ts.FindData.nFileSizeHigh*4294967296+ts.FindData.nFileSizeLow;  

Result.Attributes.ReadOnly:=(faReadOnly and ts.Attr)>0;  

Result.Attributes.Hidden:=(faHidden and ts.Attr)>0;  

Result.Attributes.System:=(faSysFile and ts.Attr)>0;  

Result.Attributes.Archive:=(faArchive and ts.Attr)>0;  

Result.ModifyDate:=FileTime2DateTime(ts.FindData.ftLastWriteTime);  

Result.LastAccessDate:=FileTime2DateTime(ts.FindData.ftLastAccessTime);  

Result.ShortName:=ts.FindData.cAlternateFileName;  

Findclose(ts);  

 
end  

 
else  

 
Result.Exists:=false;  

 
end;

Вот пример из фака. ВСе это вношу в длл... в программе уже пишу:
var FileInfo: TFileInfo;
begin
FileInfo:=ReadFileInfo(...);
ShowMessage(DateTimeToStr(FileInfo.CreateDate)); - тут возникает EInvalidOp

А если беру инфу например ModifyFile то он возращает стандартную дату 1899 года.


1)Почему ошибка?
2)А как нормальную то дату получить?))
3)В длл нельзя типы передавать?


--------------------
"Он знает: надо смеяться над тем, что тебя мучит, иначе не сохранишь равновесия, иначе мир сведет тебя с ума" - Над кукушкиным гнездом
PM MAIL ICQ   Вверх
Ripper
Дата 25.9.2004, 12:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Lonely soul...
**


Профиль
Группа: Участник
Сообщений: 920
Регистрация: 30.6.2004
Где: г. Москва

Репутация: 1
Всего: 23



Up hmmm.gif


--------------------
"Он знает: надо смеяться над тем, что тебя мучит, иначе не сохранишь равновесия, иначе мир сведет тебя с ума" - Над кукушкиным гнездом
PM MAIL ICQ   Вверх
Pathfider
Дата 28.9.2004, 21:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 128
Регистрация: 13.7.2004
Где: все там же

Репутация: -1
Всего: 1



можно в принципе и дез ДЛЛ обойтись:
Код

procedure TForm3.FormShow(Sender: TObject);
var
 fhandle: THandle;
 finfo: BY_HANDLE_FILE_INFORMATION;
 flt: _FILETIME;
 fst: _SYSTEMTIME;
begin
 fhandle:=FileOpen(<your filename>, fmOpenRead);
 GetFileInformationByHandle(fhandle, finfo);
 FileTimeToLocalFileTime(finfo.ftCreationTime, flt);
 FileTimeToSystemTime(flt, fst);
 Label12.Caption:=DateToStr(EncodeDate(fst.wYear, fst.wMonth, fst.wDay))+'   '+TimeToStr(EncodeTime(fst.wHour, fst.wMinute, fst.wSecond, fst.wMilliseconds));
 FileTimeToLocalFileTime(finfo.ftLastAccessTime, flt);
 FileTimeToSystemTime(flt, fst);
 Label14.Caption:=DateToStr(EncodeDate(fst.wYear, fst.wMonth, fst.wDay));
 FileTimeToLocalFileTime(finfo.ftLastWriteTime, flt);
 FileTimeToSystemTime(flt, fst);
 Label16.Caption:=DateToStr(EncodeDate(fst.wYear, fst.wMonth, fst.wDay))+'   '+TimeToStr(EncodeTime(fst.wHour, fst.wMinute,  fst.wSecond, fst.wMilliseconds));
 if finfo.dwFileAttributes=FILE_ATTRIBUTE_ARCHIVE then Label18.Caption:='archive file';
 if finfo.dwFileAttributes=FILE_ATTRIBUTE_COMPRESSED then Label18.Caption:='compressed file';
 if finfo.dwFileAttributes=FILE_ATTRIBUTE_NORMAL then Label18.Caption:='normal file';
 if finfo.dwFileAttributes=FILE_ATTRIBUTE_SYSTEM then Label18.Caption:='system file';
 if finfo.dwFileAttributes=FILE_ATTRIBUTE_TEMPORARY then Label18.Caption:='temporary file';
 Label7.Caption:=ExtractFileName(<your filename>);
 Label6.Caption:=ExtractFilePath(<your filename>);
 Label8.Caption:=ExtractFileExt(<your filename>);
 Label9.Caption:=<your filename>+' bytes';
 FileClose(fhandle);
end;

Почти все написано на WinAPI.
Это только вариант.
--------------------
Trust is a weakness
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0760 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.