![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
Подскажите пожалуйста, записываю поток в файл, и при открытии файла, там вместо значений нули или иероглифы
Код:
unit TEST1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
i:integer;
n: array[1..10] of integer;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var
p: TStream;
begin
for i:= 1 to 10 do
n[i]:= (i)*(2);
p := TFileStream.Create('D:\тест\file34.txt', fmCreate or fmOpenRead or fmOpenWrite);
try
p.WriteBuffer(n, SizeOf(n));
finally
p.Free;
end;
end;
end. |
|
#2
|
|||
|
|||
|
Попробуй p.writebuffer(n[1],Length(n)*sizeof(integer));
|
|
#3
|
|||
|
|||
|
все равно такая же шляпа((
|
|
#4
|
|||
|
|||
|
Тогда пиши поэлементно.
|
|
#5
|
||||
|
||||
|
Код:
там вместо значений нули или иероглифы |
|
#6
|
|||
|
|||
|
Хотел увидеть элементы моего массива
|
|
#7
|
||||
|
||||
|
число 2 ( integer ) занимает 4 байта и в 16-тиричном коде выглядит:
02 00 00 00 |
|
#8
|
|||
|
|||
|
Там даже в 16 ричном формате не отображается, пишутся 0, @ и т.п.
|
|
#9
|
||||
|
||||
|
Думаю стоит использовать не WriteBuffer, а просто Write.
|
|
#10
|
||||
|
||||
|
Да не надо там ничего исправлять. Все у него правильно работает, человек просто не понимает, что у него записываются данные как набор байт, а не как набор символов. Позвольте не поверить, что в HEX-формате у вас как вы говорите отображается @. Такого просто быть не может, иначе это не HEX-формат. Может вы видете символьное представление байта рядом? Тогда да, такое вполне возможно.
|
|
#11
|
|||
|
|||
|
А как тогда, перевести, чтобы в файле отображались числа массива.
|
|
#12
|
|||
|
|||
|
Цитата:
|
|
#13
|
||||
|
||||
|
Где-то так:
Код:
unit UMain;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ComCtrls, ToolWin;
type
TForm1 = class(TForm)
ToolBar1: TToolBar;
btClear: TToolButton;
btFill: TToolButton;
btSave: TToolButton;
btLoad: TToolButton;
btToMemo: TToolButton;
mmResult: TMemo;
procedure btClearClick(Sender: TObject);
procedure btFillClick(Sender: TObject);
procedure btSaveClick(Sender: TObject);
procedure btLoadClick(Sender: TObject);
procedure btToMemoClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
IntArr: array[1..10] of integer;
implementation
{$R *.dfm}
procedure TForm1.btClearClick(Sender: TObject);
var
i: Integer;
begin
for i := Low(IntArr) to High(IntArr) do
IntArr[i] := 0;
end;
procedure TForm1.btFillClick(Sender: TObject);
var
i: Integer;
begin
for i := Low(IntArr) to High(IntArr) do
IntArr[i] := i * 2;
end;
procedure TForm1.btSaveClick(Sender: TObject);
var
p: TStream;
begin
p := TFileStream.Create('file34.txt', fmCreate or fmOpenRead or fmOpenWrite);
try
p.Seek(0, soBeginning);
p.WriteBuffer(IntArr[Low(IntArr)], Length(IntArr) * SizeOf(Integer));
finally
p.Free
end;
end;
procedure TForm1.btLoadClick(Sender: TObject);
var
p: TStream;
begin
p := TFileStream.Create('file34.txt', fmOpenRead);
try
p.Seek(0, soBeginning);
p.ReadBuffer(IntArr[Low(IntArr)], Length(IntArr) * SizeOf(Integer));
finally
p.Free
end;
end;
procedure TForm1.btToMemoClick(Sender: TObject);
var
i: Integer;
begin
mmResult.Clear;
for i := Low(IntArr) to High(IntArr) do
mmResult.Lines.Add(IntToStr(IntArr[i]));
end;
end. |
|
#14
|
|||
|
|||
|
Спасибо большое.
|