Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Вопросы по Delphi (до версии 2009) - часть 6

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки
На первую страницук этому сообщениюк последнему сообщению

Открыть новую тему     Написать ответ в эту тему

R3Pa4eK



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору

program IFC;
 
{$APPTYPE CONSOLE}
 
uses
  Windows, SysUtils, Classes, Forms;
 
const
  bufsize = 65535;
 
type
  TFileInfo = record
    Name: AnsiString;
    Size: Longint;
    StartOffset: Longint;
  end;
 
  TBuffer = Array [1..bufsize] of Char;
 
var
  Count: Integer;
  List: Array[1..bufsize] of TFileInfo;
  Buffer: TBuffer;
  F, F2: File;
  FSize, FPos, TempPos, tmpsize:longint;
  Input: TFileInfo;
  i: Integer;
 
Procedure Wave(Buffer: TBuffer; BufSize: Integer);
var i: Longint;
    k: Integer;
    fname: String;
Begin
for i:=1 to BufSize-12 do Begin
  if buffer[i]='R' then
    if buffer[i+1]='I' then
      if buffer[i+2]='F' then
        if buffer[i+3]='F' then
          if buffer[i+8]='W' then
           if buffer[i+9]='A' then
            if buffer[i+10]='V' then
             if buffer[i+11]='E' then Begin
              Inc(Count);
              Seek(F,FPos+i+3);
              Blockread(F,FSize,4);
              FSize:=FSize+8;
              fname:=ExtractFileName('data.7z');
              input.Name:='';
              k:=1;
              repeat
              input.Name:=input.Name+fname[k];
              inc(k);
              until (k=8)or(fname[k]='.');
              input.Name:= IntToHex(FSize, 16) + '_' + IntToHex(FPos+i-1, 16) + '.wav';
              input.Size:= FSize;
              input.StartOffset:=FPos+i-1;
              List[count]:=input;
                                      End;
                       End;
End;
 
begin
  if not (FileExists(ParamStr(2))) then begin
    WriteLn('Error! Input file was not found!');
    Exit;
  end;
 
Assignfile(F, 'data.7z');
try Reset(F,1);
except end;
FPos:=0;
  Repeat
    Application.ProcessMessages;
    Blockread(F,Buffer,bufsize);
    TempPos:=FilePos(F)-12;
    Wave(Buffer,bufsize);
    FPos:=FPos+65523;
    Seek(f,TempPos);
  Until Filepos(f)>=Filesize(f)-bufsize;
  Blockread(F,Buffer,Filesize(F)-Filepos(F));
  Wave(Buffer,Filesize(F)-Filepos(F));
try Closefile(F);
except end;
 
WriteLn('Found', Count, ' wave files!');
 
end.

Всего записей: 963 | Зарегистр. 15-01-2011 | Отправлено: 17:19 05-12-2012
Открыть новую тему     Написать ответ в эту тему

На первую страницук этому сообщениюк последнему сообщению

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Вопросы по Delphi (до версии 2009) - часть 6


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru