![]() |
|
|
Регистрация | << Правила форума >> | 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
|
|||
|
|||
![]() Спасибо большое.
|