Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.08.14;
Скачать: CL | DM;

Вниз

Работа со 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;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.072 c
11-1105533820
nicesc
2005-01-12 15:43
2005.08.14
Edit1.Text - ошибка при попытке присвоить значение


3-1120461903
kyn66
2005-07-04 11:25
2005.08.14
Как обратиться к столбцу суммы EhLib ?


14-1122140424
X9
2005-07-23 21:40
2005.08.14
2 компа + 2 сет.платы + витая пара = troubles


3-1120548686
DDDeN
2005-07-05 11:31
2005.08.14
Начало работы с InterBase


11-1104254184
miek
2004-12-28 20:16
2005.08.14
KOL: свежие глюки