Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 20.11.2010, 13:32   #1
minasgull
 
Регистрация: 20.11.2010
Сообщений: 7
По умолчанию Работа с файлами

Ребят, подскажите команды, а лучше где порыться, чтобы запросить у файла дату создания файла, дату изменения файла, объем файла, качество ави файла, качество мп3 файла, длительность ави/мп3 ну и т.д.
minasgull вне форума Ответить с цитированием
Старый 20.11.2010, 16:09   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
чтобы запросить у файла дату создания файла, дату изменения файла, объем файла
FindFirstFile поможет. В его структуре WIN32_FIND_DATA есть ответы на этот вопрос.
Цитата:
качество ави файла, качество мп3 файла, длительность ави/мп3 ну и т.д.
А вот это ИМХО сложнее... Тут нужно читать сводку файла через Shell интерфейсы...
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 25.11.2010, 00:07   #3
minasgull
 
Регистрация: 20.11.2010
Сообщений: 7
По умолчанию

АВИ и МП3 реализовал через другие функции и доп модуль.
Ребят как определить Hendle файла. Я что-то читал-читал и ничего особо не понял.
Помогите плиз. Объясните или напишите функцию получения Хендла
minasgull вне форума Ответить с цитированием
Старый 25.11.2010, 09:09   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

А зачем тебе хендл? Он же непостоянный.
Впрочем CreateFile (который заменил OpenFile) дает хендл.
Кстати fopen по-моему тоже как раз в FILE выдает хендл...
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 25.11.2010, 09:48   #5
wm_leviathan
Форумчанин
 
Аватар для wm_leviathan
 
Регистрация: 17.02.2010
Сообщений: 399
По умолчанию

дата файла
Код:
procedure TForm1.Button1Click(Sender: TObject);
var File_Rec: TSearchRec;
DateTime:TDateTime;
begin
findFirst('C:\MyFile.txt', 1, File_Rec);
DateTime:=FileDateToDateTime(File_R ec.Time);
showMessage('Дата и время: '+DateTimeTostr(DateTime));
showMessage('Только время: '+TimeTostr(DateTime));
showMessage('Только дата: '+DateTostr(DateTime));
end;
размер файла
Код:
function SizeFile(fName: string): int64;

var
  ff: _win32_find_dataa;
  hFind: hwnd;
begin
  hFind := FindFirstfile(pchar(FName), ff);
  if (INVALID_HANDLE_VALUE <> hFind) then
  result := ff.nFileSizeLow;


end;
wm_leviathan вне форума Ответить с цитированием
Старый 25.11.2010, 16:05   #6
minasgull
 
Регистрация: 20.11.2010
Сообщений: 7
По умолчанию

Спасиб. сейчас попробую.
GetFileTime выдает даты созд, изм, доступа. Для этого ей надо передать хендл

Снова та же самая ошибка. Эта процедура возвращает дату последнего изменения.

Никак не могу сообразить как работает OpenFile.
У меня такая ситуация. в переменную сохраняется путь к фалу взятый из файллистбокс.
Мне надо об этом файле сделать описание характеристик.
единственное что осталось это достать хендл файла.

Можете прислать примера работы с функцие опенфайл??

Последний раз редактировалось minasgull; 25.11.2010 в 16:49.
minasgull вне форума Ответить с цитированием
Старый 26.11.2010, 06:28   #7
MaxNik2009
Форумчанин
 
Аватар для MaxNik2009
 
Регистрация: 17.09.2009
Сообщений: 294
По умолчанию

вот тебе пример для определения даты создания файла:
Код:
procedure TForm2.Button1Click(Sender: TObject);
var
  tfCreate: TFileTime;
  stCreate: TSystemTime;
  dtCreate: TDateTime;
  HandleFile: THandle;
begin

  HandleFile:= CreateFile('C:\Downloads\Прайс_25.11.10_Новосибирск.xls', 0,
    FILE_SHARE_READ, nil, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);

  GetFileTime(HandleFile, @tfCreate, nil, nil);
  FileTimeToSystemTime(tfCreate, stCreate);
  dtCreate:= SystemTimeToDateTime(stCreate);

  Label1.Caption:= DateToStr(dtCreate);

  CloseHandle(HandleFile);
end;
принимаю благодарности в письменном виде( весы слева)...
MaxNik2009 вне форума Ответить с цитированием
Старый 29.11.2010, 00:56   #8
minasgull
 
Регистрация: 20.11.2010
Сообщений: 7
По умолчанию

Спасиб всем кто отозвался.

примеры выложу для таких же как я

инфо МП3 (К сожалению кроме этого ничего не нашел)

type
TID3Tag = record
ID: string[3];
Titel: string[30];
Artist: string[30];
Album: string[30];
Year: string[4];
Comment: string[30];
Genre: Byte;
end;

var
Form1: TForm1;
Genres : array[0..146] of string =
('Blues','Classic Rock','Country','Dance','Disco','Fu nk','Grunge',
'Hip- Hop','Jazz','Metal','New Age','Oldies','Other','Pop','R&B',
'Rap','Reggae','Rock','Techno','Ind ustrial','Alternative','Ska',
'Death Metal','Pranks','Soundtrack','Euro-Techno','Ambient',
'Trip-Hop','Vocal','Jazz+Funk','Fusion',' Trance','Classical',
'Instrumental','Acid','House','Game ','Sound Clip','Gospel','Noise',
'Alternative Rock','Bass','NOP','Punk','Space',' Meditative','Instrumental Pop',
'Instrumental Rock','Ethnic','Gothic','Darkwave', 'Techno-Industrial','Electronic',
'Pop-Folk','Eurodance','Dream','Southern Rock','Comedy','Cult','Gangsta',
'Top 40','Christian Rap','Pop/Funk','Jungle','Native US','Cabaret','New Wave',
'Psychadelic','Rave','Showtunes','T railer','Lo-Fi','Tribal','Acid Punk',
'Acid Jazz','Polka','Retro','Musical','Ro ck & Roll','Hard Rock','Folk',
'Folk-Rock','National Folk','Swing','Fast Fusion','Bebob','Latin','Revival',
'Celtic','Bluegrass','Avantgarde',' Gothic Rock','Progressive Rock',
'Psychedelic Rock','Symphonic Rock','Slow Rock','Big Band','Chorus',
'Easy Listening','Acoustic','Humour','Spe ech','Chanson','Opera',
'Chamber Music','Sonata','Symphony','Booty Bass','Primus','Porn Groove',
'Satire','Slow Jam','Club','Tango','Samba','Folklo re','Ballad',
'Power Ballad','Rhytmic Soul','Freestyle','Duet','Punk Rock','Drum Solo',
'Acapella','Euro-House','Dance Hall','Goa','Drum & Bass','Club-House',
'Hardcore','Terror','Indie','BritPo p','Negerpunk','Polsk Punk','Beat',
'Christian Gangsta','Heavy Metal','Black Metal','Crossover','Contemporary C',
'Christian Rock','Merengue','Salsa','Thrash Metal','Anime','JPop','SynthPop');


function readID3Tag(FileName: string): TID3Tag;
var
FS: TFileStream;
Buffer: array [1..128] of Char;
begin
FS := TFileStream.Create(FileName, fmOpenRead or fmShareDenyWrite);
try
FS.Seek(-128, soFromEnd);
FS.Read(Buffer, 128);
with Result do
begin
ID := Copy(Buffer, 1, 3);
Titel := Copy(Buffer, 4, 30);
Artist := Copy(Buffer, 34, 30);
Album := Copy(Buffer, 64, 30);
Year := Copy(Buffer, 94, 4);
Comment := Copy(Buffer, 98, 30);
Genre := Ord(Buffer[128]);
end;
finally
FS.Free;
end;
end;

procedure TfrmMain.Button1Click(Sender: TObject);
begin
if OpenDialog1.Execute then
begin
with readID3Tag(OpenDialog1.FileName) do
begin
LlbID.Caption := 'ID: ' + ID;
LlbTitel.Caption := 'Titel: ' + Titel;
LlbArtist.Caption := 'Artist: ' + Artist;
LlbAlbum.Caption := 'Album: ' + Album;
LlbYear.Caption := 'Year: ' + Year;
LlbComment.Caption := 'Comment: ' + Comment;
if (Genre >= 0) and (Genre <=146) then
LlbGenre.Caption := 'Genre: ' + Genres[Genre]
else
LlbGenre.Caption := 'N/A';
end;
end;
end;
minasgull вне форума Ответить с цитированием
Старый 29.11.2010, 00:56   #9
minasgull
 
Регистрация: 20.11.2010
Сообщений: 7
По умолчанию

Получение Дат создания(CTS), изменения(LWTS), доступа(LATS)
var
FileHandle: THandle;
LocalFileTime: TFileTime;
DosFileTime: DWORD;
LAT,CT,LWT: TDateTime;
FindData: TWin32FindData;
LATS,CTS,LWTS:string;
begin
FileHandle := FindFirstFile(pchar(тут путь к файлу. строковое значение), FindData);
if FileHandle <> INVALID_HANDLE_VALUE then
begin
Windows.FindClose(Handle);
if (FindData.dwFileAttributes and FILE_ATTRIBUTE_DIRECTORY) = 0 then
begin
FileTimeToLocalFileTime(FindData.ft CreationTime, LocalFileTime);
FileTimeToDosDateTime(LocalFileTime ,
LongRec(DosFileTime).Hi, LongRec(DosFileTime).Lo);
CT := FileDateToDateTime(DosFileTime);
CTS:= DateTimeToStr(CT);
FileTimeToLocalFileTime(FindData.ft LastWriteTime, LocalFileTime);
FileTimeToDosDateTime(LocalFileTime ,
LongRec(DosFileTime).Hi, LongRec(DosFileTime).Lo);
LWT := FileDateToDateTime(DosFileTime);
LWTS:= DateTimeToStr(LWT);
FileTimeToLocalFileTime(FindData.ft LastAccessTime, LocalFileTime);
FileTimeToDosDateTime(LocalFileTime ,
LongRec(DosFileTime).Hi, LongRec(DosFileTime).Lo);
LAT := FileDateToDateTime(DosFileTime);
LATS:=DateTimeToStr(LAT);

Информацию собирал по всему инету. Может кому пригодится.
minasgull вне форума Ответить с цитированием
Старый 29.11.2010, 00:59   #10
minasgull
 
Регистрация: 20.11.2010
Сообщений: 7
По умолчанию

Инфо АВИ (тут надо дописывать модуль)

Модуль

unit AviInformation;

interface

uses
SysUtils;
type
TAVIFileInfo = packed record
AVIFileName: string;
FileSize: double;
ClipLength: double;
VideoCodec: string[32];
ClipBitrate: double;
ClipWidth: Integer;
ClipHeight: Integer;
ClipFPS: double;
AudioCodec: string[32];
AudioBitRate: Integer;
AudioSampleRate: Integer;
AudioChannelCnt: Byte;
end;
function ReadAviInfo(FileName: string; var ErrCode: Byte): TAVIFileInfo;

implementation

function ReadAviInfo(FileName: string; var ErrCode: Byte): TAVIFileInfo;
var
iFileHandle: Integer;
Aviheadersize: integer;
Vheadersize: integer;
Aviheaderstart: integer;
Vheaderstart: integer;
Aheaderstart: integer;
Astrhsize: integer;
TempFExt: string[5];
TempSize: Integer;
TempVcodec: string[5];
TempAcodec: integer;
TempMicrosec: integer;
TempLengthInFrames: integer;
TempAchannels: integer;
TempAsamplerate: integer;
TempAbitrate: integer;
Size: double;
Length: double;
Vcodec: string;
Vbitrate: double;
VWidth: integer;
VHeight: integer;
Fps: double;
LengthInSec: double;
Acodec: string;
Abitrate: Integer;
RetVal: TAVIFileInfo;
begin
ErrCode := 0;
TempAcodec := 0;
TempAbitrate := 0;
TempAsamplerate := 0;
TempAchannels := 0;
if not FileExists(FileName) then
begin
ErrCode := 1;
exit;
end;
iFileHandle := FileOpen(FileName, fmOpenRead);
FileSeek(iFileHandle, 7, 0);
FileRead(iFileHandle, TempFExt, 5);
if copy(TempFExt, 0, 4) <> 'AVI ' then
begin
ErrCode := 2;
exit;
end;
FileSeek(iFileHandle, 4, 0);
FileRead(iFileHandle, TempSize, 4);
FileSeek(iFileHandle, 28, 0);
FileRead(iFileHandle, Aviheadersize, 4);
Aviheaderstart := 32;
FileSeek(iFileHandle, Aviheaderstart, 0);
FileRead(iFileHandle, TempMicrosec, 4);
FileSeek(iFileHandle, Aviheaderstart + 16, 0);
FileRead(iFileHandle, TempLengthInFrames, 4);
FileSeek(iFileHandle, Aviheaderstart + 32, 0);
FileRead(iFileHandle, VWidth, 4);
FileSeek(iFileHandle, Aviheaderstart + 36, 0);
FileRead(iFileHandle, VHeight, 4);
FileSeek(iFileHandle, Aviheaderstart + Aviheadersize + 4, 0);
FileRead(iFileHandle, Vheadersize, 4);
Vheaderstart := Aviheaderstart + Aviheadersize + 20;
FileSeek(iFileHandle, Vheaderstart + 3, 0);
FileRead(iFileHandle, TempVCodec, 5);
Aheaderstart := Vheaderstart + Vheadersize + 8;
FileSeek(iFileHandle, Aheaderstart - 4, 0);
FileRead(iFileHandle, Astrhsize, 5);
FileSeek(iFileHandle, Aheaderstart + Astrhsize + 8, 0);
FileRead(iFileHandle, TempACodec, 2);
FileSeek(iFileHandle, Aheaderstart + Astrhsize + 10, 0);
FileRead(iFileHandle, TempAchannels, 2);
FileSeek(iFileHandle, Aheaderstart + Astrhsize + 12, 0);
FileRead(iFileHandle, TempAsamplerate, 4);
FileSeek(iFileHandle, Aheaderstart + Astrhsize + 16, 0);
FileRead(iFileHandle, TempAbitrate, 4);
FileClose(iFileHandle);
Vcodec := copy(TempVcodec, 0, 4);
if Vcodec = 'div2' then
Vcodec := 'MS MPEG4 v2'
else if Vcodec = 'DIV2' then
Vcodec := 'MS MPEG4 v2'
else if Vcodec = 'div3' then
Vcodec := 'DivX;-) MPEG4 v3'
else if Vcodec = 'DIV3' then
Vcodec := 'DivX;-) MPEG4 v3'
else if Vcodec = 'div4' then
Vcodec := 'DivX;-) MPEG4 v4'
else if Vcodec = 'DIV4' then
Vcodec := 'DivX;-) MPEG4 v4'
else if Vcodec = 'div5' then
Vcodec := 'DivX;-) MPEG4 v5'
else if Vcodec = 'DIV5' then
Vcodec := 'DivX;-) MPEG4 v5'
else if Vcodec = 'divx' then
Vcodec := 'DivX 4'
else if Vcodec = 'mp43' then
Vcodec := 'Microcrap MPEG4 v3';
case TempAcodec of
0: Acodec := 'PCM';
1: Acodec := 'PCM';
85: Acodec := 'MPEG Layer 3';
353: Acodec := 'DivX;-) Audio';
8192: Acodec := 'AC3-Digital';
else
Acodec := 'Unknown (' + IntToStr(TempAcodec) + ')';
end;
case (Trunc(TempAbitrate / 1024 * 8)) of
246..260: Abitrate := 128;
216..228: Abitrate := 128;
187..196: Abitrate := 128;
156..164: Abitrate := 128;
124..132: Abitrate := 128;
108..116: Abitrate := 128;
92..100: Abitrate := 128;
60..68: Abitrate := 128;
else
Abitrate := Round(TempAbitrate / 1024 * 8);
end;
Size := TempSize / 1024 / 1024;
Fps := 1000000 / TempMicrosec; // FPS
LengthInSec := TempLengthInFrames / fps;
Length := LengthInSec / 60;
Vbitrate := (TempSize / LengthInSec - TempABitrate) / 1024 * 8;
RetVal.AVIFileName := FileName;
RetVal.FileSize := Size;
RetVal.ClipLength := Length;
RetVal.VideoCodec := VCodec;
RetVal.ClipBitrate := Vbitrate;
RetVal.ClipWidth := VWidth;
RetVal.ClipHeight := VHeight;
RetVal.ClipFPS := FPS;
RetVal.AudioCodec := Acodec;
RetVal.AudioBitRate := Abitrate;
RetVal.AudioSampleRate := TempAsamplerate;
RetVal.AudioChannelCnt := TempAchannels;
ReadAviInfo := RetVal;
end;

end.
minasgull вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа с файлами. Pascaler Помощь студентам 6 13.05.2010 10:23
работа с файлами Serjuk Общие вопросы C/C++ 2 06.05.2010 19:25
работа с файлами 4thWing Общие вопросы C/C++ 5 12.04.2010 01:04