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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 13.02.2010, 13:04   #1
Владимир1988
Пользователь
 
Регистрация: 10.11.2009
Сообщений: 25
По умолчанию TMemoryStream

Подскажите плиз, почему при чтении потока p2 выходит access violation. При записи (первая процедура) все работает отлично.
Код:
    SaveButton1: TButton;
    StringGrid1: TStringGrid;
    StringGrid2: TStringGrid;
    LoadButton1: TButton;
    Memo1: TMemo;
    procedure SaveButton1Click(Sender: TObject);
    procedure LoadButton1Click(Sender: TObject);

  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.SaveButton1Click(Sender: TObject);
var
  i: integer;
  n: array[1..MaxElements] of integer;
  p1: TMemoryStream;
  S: string;
   begin
    for i := 1 to MaxElements do begin
     n[i]:= (i)*(2);
     StringGrid1.Cells[1, i]:= intTostr(n[i]);
      end;
       p1 := TMemoryStream.Create;
        try
         for i := 1 to MaxElements do begin
          S := IntToStr(n[i]) + #13#10;
          p1.WriteBuffer(Pointer(S)^, Length(S));
          p1.Position := 0;
          Memo1.Lines.LoadFromStream(p1);
         end;
         p1.SaveToFile('D:\тест\file34.txt');
        finally
       p1.Free;
     end;
   end;

procedure TForm1.LoadButton1Click(Sender: TObject);
 var
  p2: TMemoryStream;
  Length, LE, i:integer;
  k: array[1..MaxElements] of string;
  W: string;
   begin
    p2:= TMemoryStream.Create;
     try
      p2.LoadfromFile('D:\тест\file34.txt'); // загружаю данные из файла в буфер
      p2.position:=0;
      p2.ReadBuffer(PChar(W)^, p2.size); // читаю данные из буфера
      LE := Pos(#13#10, W);
      i:=0;
       while LE> 0 do begin
        inc(i);
        k[i+low(k)-1] := Copy(W, 1, LE - 1);
        delete (W,1,LE+1);
        LE := Pos(#13#10, W);
       end;
      finally
     p2.Free;
    end;
   for i := 1 to MaxElements do
  StringGrid2.Cells[1, I] := (k[i]);
 end;
end.
Владимир1988 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Запуск mp3 из TMemoryStream alegz81 Мультимедиа в Delphi 2 01.01.2010 05:51
TMemoryStream присвоить строковой переменной inndim Общие вопросы Delphi 3 06.05.2009 11:36
TMemorystream -> TJPEGimage ( используя сеть ) Lime Работа с сетью в Delphi 2 17.02.2009 03:14
переместить память из TMemoryStream в промежуточный буфер и в буфере найти слова Дядя Фёдор Общие вопросы Delphi 2 02.10.2007 00:20