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


Автор: Vladimir1988 28.1.2010, 15:16
Подскажите пожалуйста, как правильно записать поток, который состоит из массива в txt файл
Вот код:
Код

unit Unit1;

interface

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

type
  TForm1 = class(TForm)

    Button4: TButton;
    procedure Button4Click(Sender: TObject);

   private
   public
    { Public declarations }
  end;

 var
  Form1: TForm1;
  i:integer;
  n: array[1..10] of smallint;
  gg: textfile;
 implementation

{$R *.dfm}


procedure TForm1.Button4Click(Sender: TObject);
 var
  p: TStream;
begin
  p := TFileStream.Create('D:\file2.txt', fmCreate);
    p.WriteBuffer(n, SizeOf(n));
     // for i:= 1 to 100 do
     //  n[i]:= (i)*(-100);
       AssignFIle(gg,'D:\тест\file1.txt');
       Rewrite(gg);
        for i := 1 to 100 do begin
         Writeln(gg, n[i]);
         n[i].SaveToStream(p);
        end;
       CloseFile(gg);
   p.Free;
end;

procedure TForm1.Button3Click(Sender: TObject);
 begin
  Application.Terminate;
 end;

end.



Заранее спасибо.

Автор: Frees 28.1.2010, 15:35
Цитата(Vladimir1988 @  28.1.2010,  18:16 Найти цитируемый пост)
как правильно записать поток, который состоит из массива в txt файл

потоку пофиг из чего он состоит записать поток в файл - SaveToFile пардо  неправ

Автор: Frees 28.1.2010, 15:52
ты имееш ввиду - есть массив и его надо записать в файл?

Код

 var
  p: TStream;
  i: Integer;
begin
 for i:= 1 to 10 do //заполним массив
    n[i]:= (i)*(-100);

  p := TFileStream.Create('D:\file2.txt', fmCreate);
  try
    p.WriteBuffer(n, SizeOf(n));//записсали в поток, поток уже пишет в файл. в бинарном виде
  finally
    p.Free;
  end;

Автор: Vladimir1988 28.1.2010, 16:05
Да, именно так, только я не пойму, для этого надо поток перевести в другой формат?
А разве такая запись не подойдет (только выходит сообщение- [Error] Unit1.pas(94): Illegal type in Write/Writeln statement)

Код

procedure TForm1.Button4Click(Sender: TObject);
 var
  p: TStream;
  begin
   for i:= 1 to 10 do //заполним массив
    n[i]:= (i)*(-100);
     p := TFileStream.Create('D:\file2.txt', fmCreate);
     try
      p.WriteBuffer(n, SizeOf(n));//записсали в поток, поток уже пишет в файл. в бинарном виде
     finally
       AssignFIle(gg,'D:\тест\file1.txt');
       Rewrite(gg);
       Writeln(gg, p);
       CloseFile(gg);
    p.Free;
  end;
end;




 

Автор: Vladimir1988 28.1.2010, 16:21
Да, я понял теперь, спасибо, только в файл ничего не пишется, он пуст.

Автор: Frees 28.1.2010, 19:13
Цитата(Vladimir1988 @  28.1.2010,  19:05 Найти цитируемый пост)
    
Код

   AssignFIle(gg,'D:\тест\file1.txt');       
  Rewrite(gg);      
  Writeln(gg, p);       
  CloseFile(gg);

зачем это? тебе нужен еще файл?

поток все записал в D:\file2.txt он  пуст?

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