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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 06.02.2012, 20:53   #1
$sky$
Новичок
Джуниор
 
Регистрация: 06.02.2012
Сообщений: 1
По умолчанию Упаковка/распаковка .dat файлов (Delphi)

Всем Привет!!! Впервые тут))) Парни, помогите плиз с созданием упаковщика файлов в архив dat. С извлечением файлов из *.dat более менее разобрался, помогли. Вот что получилось:

Код:
Program Unpack;
{$APPTYPE CONSOLE}
Uses SysUtils;
Var
    Fi, Fl: File;
    P: Array Of Byte;
    M: Array Of Byte;
    I, HS, FSize, FOffs, TF: LongInt;
    S, St, Sd, DPath: String;
Begin
  WriteLn('DAT unpacker');
  WriteLn('This prog bY WaLLey');
  WriteLn;
  If ParamCount<>1 Then
    Begin
      WriteLn('Usage: Unpack filename.dat');
      Exit;
    End;
  If FileExists(ParamStr(1))=False Then
    Begin
      WriteLn('File not found.');
      Exit;
    End;
  DPath:=ParamStr(1);
  Delete(DPath, Length(DPath)-3, 4);
  If DirectoryExists(DPath)=False Then CreateDir(DPath);
  AssignFile(Fi, ParamStr(1));
  Reset(Fi, 1);
  BlockRead(Fi, I, 4);
  BlockRead(Fi, HS, 4);
  WriteLn('Header Size = ', HS);
  SetLength(P, HS);
  BlockRead(Fi, P[0], HS);
  For I:=0 To HS-1 Do P[I]:=P[I] Xor $AD;
  I:=0;
  TF:=0;
  While I<HS Do
    Begin
      Move(P[I], FSize, 4);
      I:=I+4;
      SetLength(S, FSize);
      Move(P[I], S[1], FSize);
      I:=I+FSize;
      Move(P[I], FSize, 4);
      I:=I+4;
      Move(P[I], FOffs, 4);
      I:=I+4+4; { +unused long ??? }
      WriteLn(DPath+'\'+S);
      SetLength(M, FSize);
      Seek(Fi, FOffs);
      BlockRead(Fi, M[0], FSize);
      For FOffs:=0 To FSize-1 Do M[FOffs]:=M[FOffs] Xor $AD;

      St:=S;
      While (Length(St)>0) And (St[Length(St)]<>'\') Do
        Delete(St, Length(St), 1);
      If Length(St)>0 Then
        Begin
          Sd:=DPath;
          While Length(St)<>0 Do
            Begin
              Sd:=Sd+'\'+Copy(St, 1, Pos('\',St));
              Delete(Sd, Length(Sd), 1);
              If DirectoryExists(Sd)=False Then CreateDir(Sd);
              St:=Copy(St, Pos('\', St)+1, Length(St));
            End;
        End;

       AssignFile(Fl, DPath+'\'+S);
       ReWrite(Fl, 1);
       BlockWrite(Fl, M[0], FSize);
       CloseFile(Fl);
       TF:=TF+1;
    End;
  SetLength(M, 0);
  SetLength(S, 0);
  SetLength(P, 0);
  CloseFile(Fi);
  WriteLn('Total files: ', TF);
  WriteLn('Done.');
End.
Нужно написать аналогичным образом прогу для обратной упаковки файликов в *.dat
Заранее благодарен...


________
Код нужно оформлять по правилам:
тегом [CODE]..[/СODE] (это кнопочка с решёточкой #)
Не забывайте об этом!
Модератор.

Последний раз редактировалось Serge_Bliznykov; 06.02.2012 в 23:00.
$sky$ вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Распаковка файлов 7zip с п омощью JScript syt Помощь студентам 0 11.11.2011 14:04
Упаковка и распаковка трехдиагональных матриц crewww Общие вопросы C/C++ 2 12.10.2011 18:08
Распаковка файлов Растаман Помощь студентам 3 09.05.2011 09:51
редактирование dat файлов Saggitarius Помощь студентам 7 01.05.2008 12:13