Форум: "Основная";
Текущий архив: 2005.08.14;
Скачать: [xml.tar.bz2];
ВнизРабота со Stream Найти похожие ветки
← →
Dio © (2005-07-23 10:54) [0]Господа, помогите разобраться с работой потоков памяти (MemoryStream).
Привожу пример программы, демонстрирующей вопрос…
Почему после изменений данных из потока не грузятся ресурсы (текст, изображение), даже если изменения вернуть?
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TMain = class(TForm)
MEMO_text: TMemo;
BUTT_Load: TButton;
BUTT_chenge: TButton;
procedure BUTT_LoadClick(Sender: TObject);
procedure BUTT_chengeClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Main: TMain;
implementation
{$R *.dfm}
procedure TMain.BUTT_LoadClick(Sender: TObject);
// Работает хорошо
var
MemSTR_temp: TMemoryStream;
begin {TMain.BUTT_LoadClick}
MemSTR_temp:=TMemoryStream.Create; //Создаю поток
MemStr_temp.LoadFromFile("Demo.txt"); //читаю из файла
Main.MEMO_text.Lines.LoadFromStream(MemStr_temp); //гружу из него мемо
MemStr_temp.Free; //освобождаю
end; {TMain.BUTT_LoadClick}
procedure TMain.BUTT_chengeClick(Sender: TObject);
//а вот это - не работает !
var
MemSTR_temp,
MemSTR_Rez : TMemoryStream;
Ar_Buf,Ar_save : Array[1..10]of byte;
i,Bt_Read : Byte;
begin {TMain.BUTT_chengeClick}
MemSTR_temp:=TMemoryStream.Create;
MemSTR_Rez:=TMemoryStream.Create;
MemSTR_temp.LoadFromFile("Demo.txt");//все аналогично
//-------------------------------
MemSTR_temp.Position:=0;
MemSTR_Rez.Position:=0;
Bt_Read:=10;
while Bt_Read=10 do // пока количество прочитанных байт равно колву читаемых
begin {While}
Bt_Read:=MemSTR_temp.Read(Ar_Buf,10); // читаю ресурс
for i:=1 to 10 do
Ar_Buf[i]:=Ar_Buf[i] xor 5; // изменяю - что то вроде криптования -
// не столь важно... Надеюсь.
MemSTR_Rez.write(Ar_Buf,Bt_Read); // пишу в результат
end; {While}
// а теперь возвращаю все как было...
MemSTR_Rez.Position:=0;
MemSTR_temp.Position:=0;
Bt_Read:=10;
while Bt_Read=10 do // пока количество прочитанных байт равно колву читаемых
begin {While}
Bt_Read:=MemSTR_Rez.Read(Ar_Buf,10); // читаю ресурс
for i:=1 to 10 do
Ar_Buf[i]:=Ar_Buf[i] xor 5; // возвращаю назад
MemSTR_temp.write(Ar_Buf,Bt_Read); // пишу в результат
end; {While}
// вроде как, что поменял, то и вернул - но...
//-------------------------------
Main.MEMO_text.Lines.LoadFromStream(MemStr_temp); //Мемо становиться пустым...
//-----------------------
//MemSTR_temp.SaveToFile("$$$"); //
//Main.MEMO_text.Lines.LoadFromFile("$$$");// а вот это работает....
//-----------------------
MemStr_temp.Free;
MemStr_Rez.Free;
end; {TMain.BUTT_chengeClick}
end.
//////////////////
Demo.txt
Текстовый файл для проверки...
Создан в блокноте.
ыдыуаофцущагзфа
фцущацхфулафц\\
132131243
/////////////////
← →
Verg © (2005-07-23 11:01) [1]
> //-------------------------------
MemStr_temp.Position := 0;
> Main.MEMO_text.Lines.LoadFromStream(MemStr_temp); //Мемо
> становиться пустым...
> //-----------------------
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2005.08.14;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.012 c