Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Для новичков > чтение из файла через TMemoryStream


Автор: Vladimir1988 13.2.2010, 15:02
Подскажите плиз, при чтении из файла через TmemoryStream выходит access violation. 
Код

unit TEST1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ToolWin, ComCtrls, ActnMan, ActnCtrls, Grids;

  const
  MaxElements = 10;

type
  TForm1 = class(TForm)
    StringGrid2: TStringGrid;
    LoadButton1: TButton;
    procedure LoadButton1Click(Sender: TObject);

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

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.LoadButton1Click(Sender: TObject);
 var
  p2: TMemoryStream;
  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.



Автор: Matematik 13.2.2010, 15:16
Строка 42, переменная W пустая, сначала надо выделить под неё память, куда писать из p2

Код

SetLength(W, p2.size);
p2.ReadBuffer(Pointer(W)^, p2.size);



Автор: bems 14.2.2010, 01:31
Matematik, внезапно может оказаться, что нужно в два раза меньше памяти
Код

SetLength(W, p2.size div SizeOf(W[1]));
p2.ReadBuffer(Pointer(W)^, p2.size);

Автор: Matematik 14.2.2010, 12:08
Цитата(bems @  14.2.2010,  01:31 Найти цитируемый пост)
внезапно 

для delphi 2009 и выше по причине Unicode

Автор: bems 14.2.2010, 15:01
Ну да, я как бы в курсе smile

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)