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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 10.11.2012, 21:02   #1
Khayzenberg
Пользователь
 
Регистрация: 21.07.2011
Сообщений: 54
Вопрос Класика считывания строк с двоичного файла

Доброго времени суток! Перед любим начинающим програмистом постает эта задачка: Нужно в двоичный файл сначала записать длину строки в потом считать эту строку. Делаю так а ничего не получаеться(куча ошибок чтения памяти):
------Сохранение-------
Код:
procedure TfrmMain.btnSaveBinaryClick(Sender: TObject);
var mfs:TFileStream;
    size:cardinal;
    data:string;
begin
 try
  mfs:=TFileStream.Create('c:\temp\Binary.dat', fmOpenWrite); mfs.Seek(0, soFromEnd);
  data:=memData.Lines[0]; size:=Length(data)*2;
  mfs.WriteBuffer(size, 4); mfs.WriteBuffer(data, size);
 finally
  FreeAndNil(mfs);
 end;
end;
--------Чтение----------
Код:
procedure TfrmMain.btnLoadBinaryClick(Sender: TObject);
var mfs:TFileStream;
    size:cardinal;
    data:string;
begin
 try
  mfs:=TFileStream.Create('c:\temp\Binary.dat', fmOpenRead); mfs.Position:=0;
  while mfs.Position<>mfs.Size do begin
   mfs.ReadBuffer(size, 4);
   SetLength(data, size div 2);
   mfs.ReadBuffer(data, size);
   memData.Lines.Append(data);
  end;
 finally
  FreeAndNil(mfs);
 end;
end;
Народ подскажите пожалуйста в чем ошибки, и извините если не втом разделе!)

Последний раз редактировалось Khayzenberg; 10.11.2012 в 21:15.
Khayzenberg вне форума Ответить с цитированием
Старый 10.11.2012, 21:46   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Код:
mfs.WriteBuffer(data[1], size);
и
Код:
mfs.ReadBuffer(data[1], size);
Не понятно только зачем текстовые данные пихать в бинарный файл...
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 10.11.2012, 22:37   #3
Khayzenberg
Пользователь
 
Регистрация: 21.07.2011
Сообщений: 54
Вопрос

data[1]

А почему так, что значит эта запись

Последний раз редактировалось Khayzenberg; 10.11.2012 в 22:45.
Khayzenberg вне форума Ответить с цитированием
Старый 10.11.2012, 22:47   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Это значит что писать в файл нужно с первого символа строки
Все дело в том что в Делфи строка это не массив, а указатель на массив. Так что нужно передавать именно ячейку памяти, с которой начинается строка, а не ячейку памяти, где расположен указатель на начало строки.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 10.11.2012, 22:54   #5
Khayzenberg
Пользователь
 
Регистрация: 21.07.2011
Сообщений: 54
Радость

Все ясно, спасибо за помощь!
Khayzenberg вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Считывания массива из файла Daleaids Общие вопросы C/C++ 4 23.12.2011 15:41
Процедура считывания из файла Black_butterfly Помощь студентам 0 29.05.2011 16:51
Возникла проблема считывания текстового файла Aerial Общие вопросы C/C++ 2 20.09.2010 10:29
потоки сохранение и считывания файла [C++] ArniLand Общие вопросы C/C++ 1 27.05.2010 23:27
Чтение из двоичного файла. С++ 15student89 Помощь студентам 0 16.01.2010 17:25