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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 18.09.2013, 16:00   #1
Nater
Пользователь
 
Регистрация: 23.05.2009
Сообщений: 59
По умолчанию Чтение данных в массив из файла с помощью FileStream

Вообщем, может для кого-то и будет просто, но у меня не выходит.

Записываю в файл массив

Код:
  tar: array[0..19,0..19] of TTileData;
type TTileData = record
    SpriteID: smallint;
    ObjectID: smallint;
    ZoneID: byte;
  end;

procedure TForm3.savebrtnClick(Sender: TObject);
var
 FileStream: TFileStream;
  Writer: TWriter;
  I: Integer;
 begin
 FileStream := TFileStream.Create('C:\Users\admin\Documents\wallpapersgenproject\test.map',
    fmCreate or fmOpenWrite or fmShareDenyNone);
  Writer := TWriter.Create(FileStream, $FF);
  Writer.WriteListBegin;
    Writer.Write(tar,sizeof(tar));
  Writer.WriteListEnd;
  Writer.Free;
  FileStream.Free;
end;
Как обратно считать файл в аналогичный пустой массив? Помогите пожалуйста.
Nater вне форума Ответить с цитированием
Старый 18.09.2013, 16:49   #2
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,515
По умолчанию

Цитата:
Как обратно считать файл
очевидно использовать не запись(Write) а чтение(Read)
во всех нужных местах.
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 18.09.2013, 17:00   #3
Nater
Пользователь
 
Регистрация: 23.05.2009
Сообщений: 59
По умолчанию

Это не приводит к результату. Ошибку выкидывает. Хотя, думаю попробую еще раз.
Nater вне форума Ответить с цитированием
Старый 18.09.2013, 17:16   #4
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,515
По умолчанию

Цитата:
Это не приводит к результату.
значить нужно почитать справку
для чего нужны были использованные вами при записи методы.
и подумать какие методы надо использовать при чтении.
Цитата:
Ошибку выкидывает.
тот код который вы НЕ привели? и неизвестную ошибку?
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 18.09.2013, 17:22   #5
Nater
Пользователь
 
Регистрация: 23.05.2009
Сообщений: 59
По умолчанию

перед тем как написать на форум неработающий код я удалил, привычка такая)

Вру, все-таки не удалил

Код:
  FileStream := TFileStream.Create('C:\Users\admin\Documents\wallpapersgenproject\test.map',
    fmOpenRead);
  Reader := TReader.Create(FileStream, $FF);
  Reader.ReadListBegin;
  Reader.Read(TilesArray,sizeof(TilesArray));
  Reader.ReadListEnd;
  Reader.Free;
  FileStream.Free;
Stream Reads Error.

На какой строке получается ошибка не показывает.
А если так делать, то index out of bounds, значит что-то с числами не так, поэтому и спрашивал правильный код.
Код:
  FileStream := TFileStream.Create('C:\Users\admin\Documents\wallpapersgenproject\test2.map',
    fmOpenRead);
  Reader := TReader.Create(FileStream, $FF);
  FileStream.Position := 0;
  FileStream.Read(TilesArray,sizeof(tilesarray));

Последний раз редактировалось Nater; 18.09.2013 в 17:36.
Nater вне форума Ответить с цитированием
Старый 18.09.2013, 18:26   #6
northener
ПШП
Участник клуба
 
Регистрация: 15.07.2013
Сообщений: 1,859
По умолчанию

А зачем вообще нужны TReader/TWriter в данном случае, при записи/чтении банального массива банальных записей?
Обычных TFileStream.Read/TFileSream.Write недостаточно?
northener вне форума Ответить с цитированием
Старый 18.09.2013, 18:29   #7
Nater
Пользователь
 
Регистрация: 23.05.2009
Сообщений: 59
По умолчанию

Я не особо дружу с файлами, если честно, до этого не особо приходилось работать с ними. Поэтому сделал так, как смог был бы признателен если бы вы показали мне пример с TFileStream.Read/Write

Все, вроде справился. Правда, ща еще с размерами придется повозиться, но в целом работает. Спасибо.

Последний раз редактировалось Nater; 18.09.2013 в 18:40.
Nater вне форума Ответить с цитированием
Старый 18.09.2013, 18:42   #8
northener
ПШП
Участник клуба
 
Регистрация: 15.07.2013
Сообщений: 1,859
По умолчанию

Код:
 FileStream := TFileStream.Create('C:\Users\admin\Documents\wallpapersgenproject\test.map',
    fmCreate or fmOpenWrite or fmShareDenyNone);
  FileStream.Write(tar,sizeof(tar));
  FileStream.Free;
Чтение аналогично.
northener вне форума Ответить с цитированием
Ответ


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

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

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Чтение данных из файла в массив в С++ Luca Brasi Общие вопросы C/C++ 5 22.09.2012 22:56
Чтение из файла в массив ashtone9130 Visual C++ 1 16.12.2011 15:14
чтение данных из файла и запись в в массив.как чтобы до конца читал? Fundorin Общие вопросы C/C++ 0 15.11.2011 18:10
Pascal|Чтение из файла в массив. Демик Помощь студентам 9 17.07.2011 14:43
FileStream Read и массив байтов bondik Общие вопросы .NET 5 06.10.2010 22:36