Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Файловая система
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 23.07.2011, 17:27
Аватар для bender42
bender42 bender42 вне форума
Прохожий
 
Регистрация: 10.04.2011
Сообщения: 11
Репутация: 10
По умолчанию .data

Доброе время суток,
Вот столкнулся с проблеммой как реализовать чтение .data файла
если кто знает по этой части подскажите пожалуйсто
вот примерный файл
Вложения
Тип файла: rar gshop.rar (33.9 Кбайт, 3 просмотров)
Ответить с цитированием
  #2  
Старый 23.07.2011, 18:29
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,505
Версия Delphi: XE10
Репутация: выкл
По умолчанию

Во первых что это за файл? Открыл винхексом, там везде какие-то ссылки на dds, это архив из игры чтоли?
__________________
— Как тебя понимать?
— Понимать меня не обязательно. Обязательно меня любить и кормить вовремя.


На Delphi, увы, больше не программирую.
Рекомендуемая литература по программированию
Ответить с цитированием
  #3  
Старый 23.07.2011, 18:47
Аватар для bender42
bender42 bender42 вне форума
Прохожий
 
Регистрация: 10.04.2011
Сообщения: 11
Репутация: 10
По умолчанию

Цитата:
Сообщение от M.A.D.M.A.N.
Во первых что это за файл? Открыл винхексом, там везде какие-то ссылки на dds, это архив из игры чтоли?
Да суть в том что dds это картинки предметов и должно быть описание мне нужно чтоб это всё выводилась в edit'ы а картинка в image и всё это дело можно было сохранить послу редактирования.
Ответить с цитированием
  #4  
Старый 23.07.2011, 19:03
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,505
Версия Delphi: XE10
Репутация: выкл
По умолчанию

А мне нужно, чтоб толком объяснили откуда взялся этот файл, чтоб понять откуда плясать, если тебе нужна помощь.
__________________
— Как тебя понимать?
— Понимать меня не обязательно. Обязательно меня любить и кормить вовремя.


На Delphi, увы, больше не программирую.
Рекомендуемая литература по программированию
Ответить с цитированием
  #5  
Старый 23.07.2011, 19:09
Аватар для bender42
bender42 bender42 вне форума
Прохожий
 
Регистрация: 10.04.2011
Сообщения: 11
Репутация: 10
По умолчанию

Цитата:
Сообщение от M.A.D.M.A.N.
А мне нужно, чтоб толком объяснили откуда взялся этот файл, чтоб понять откуда плясать, если тебе нужна помощь.

Это игра Perfect World файл data это магазин игры.
вот чё накапал в инете
Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Menus;

  type
  TList1 = record
    id:integer;
    name: array [0..63] of byte;
    int1:integer;
    int2:integer;
    int3:integer;
    int4:integer;
 end;

type
  TForm1 = class(TForm)
     Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    Label5: TLabel;
    Label6: TLabel;
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    Edit4: TEdit;
    Edit5: TEdit;
    Edit6: TEdit;
    ListBox1: TListBox;
    Button1: TButton;
    OpenDialog1: TOpenDialog;
    procedure ListBox1Click(Sender: TObject);
    procedure Button1Click(Sender: TObject);

  private
  ListPos: array [1..4] of Integer;  // сюда сохраняем смещения листa
  ListLen: array [1..4] of Integer;  // сюда сохраняем количество элементов
  ffile: tStream;
  procedure OpenList1(lb: TListBox); // это у нас собс-но открытие первого листа
  procedure FillListPos; // это будет заполнение листа
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

var
  List1: array of TList1;


procedure TForm1.OpenList1(lb: TListBox);
var
  num: integer;
  w: widestring;
begin
  num := lb.ItemIndex;
  Edit1.Text:=IntToStr(List1[num].id);
  SetLength(w, 32);
  Move(List1[num].name[0], w[1], 64);
  Edit2.Text:=w;
  Edit3.Text:=IntToStr(List1[num].int1);
  Edit4.Text:=IntToStr(List1[num].int2);
  Edit5.Text:=IntToStr(List1[num].int3);
  Edit6.Text:=IntToStr(List1[num].int4);
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  i: Integer;
  ws: WideString;
begin
  if OpenDialog1.Execute then begin
    if not FileExists(opendialog1.FileName) then exit;

    if Assigned(fFile) then
    begin
      FreeAndNil(fFile);
    end;
    // Создаем поток
    fFile := TFileStream.Create(OpenDialog1.FileName, (fmOpenReadWrite{or fmShareExclusive}));

    // Заполняем массив с позициями
    FillListPos;

    // Читаем лист 1
    SetLength(ws, 32);
    fFile.Position := ListPos[1]+4;
    SetLength(List1, ListLen[1]);
    fFile.Read(List1[0], ListLen[1]*SizeOf(TList1));
    for i := 0 to ListLen[1] - 1 do
    begin
      Move(List1[i].name, Pointer(ws)^, 64);
      ListBox1.Items.Add(IntToStr(List1[i].id) + ' - ' + ws);
    end;
  end;
end;

procedure TForm1.FillListPos;
var
  fListLen: Integer;
begin
(*
== подсчет смещений каждого последующего листа ==
8 это смещение первого листа.
8 + 4 + размер первого листа = смещение второго листа.
смещение второго листа + 4 + размер второго листа = смещение третьего, и т.д.
*)
  ListPos[1] := 8;
  if Assigned(fFile) then begin
    fFile.Position := ListPos[1]; // устанавливавем маркер в позицию начала Листа1
     fFile.Read(fListLen, SizeOf(fListLen)); // Считываем количество элементов
     ListLen[1] := fListLen;
    ListPos[2] := ListPos[1] + ListLen[1]*SizeOf(TList1) + 4; // получаем смещение второго листа
   end;
end;
// -------------------------------------------------------- //
procedure TForm1.ListBox1Click(Sender: TObject);
begin
  openlist1(listbox1);
end;

end.

но она не открывает нужный мне файл
но открывает другой файл каторый мне тоже нужно открыть
Ответить с цитированием
  #6  
Старый 23.07.2011, 21:40
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Дебагером не пробовал пройтись? Этот код либо читает не то что нужно, либо код не для этого файла, но ясно одно, код и файл не совместимы.
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
  #7  
Старый 23.07.2011, 21:56
Аватар для bender42
bender42 bender42 вне форума
Прохожий
 
Регистрация: 10.04.2011
Сообщения: 11
Репутация: 10
По умолчанию

Цитата:
Сообщение от angvelem
Дебагером не пробовал пройтись? Этот код либо читает не то что нужно, либо код не для этого файла, но ясно одно, код и файл не совместимы.
Сории но в работе с файлами тока начинаю поэтому я и прошу помоши в своём проекте
Ответить с цитированием
  #8  
Старый 24.07.2011, 00:35
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Так в чём помочь то? Приведённый код читает бред из файла. Откуда взята спецификация по смещениям в файле? Мне заниматься хакерством лень.
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 03:13.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter