Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Помогите разобраться с потоком [D7, WinXP]


chili ©   (2005-07-26 16:59:00) 

Добрый день...

Помогите разобраться с потоком

Делаю так:

type
   nPointer = ^TNEWREC;
   TNEWREC = record
       test  : byte;
       test1 : string[60];
       test3 : string[60];
   end;
..

var
  dList : TList;
  Tester : nPointer;
  stream : TFileStream;

procedure save();
begin
  dList := TList.Create;
  new(Tester);
  with Tester^ do
   begin
       test  := StrToInt(Edit1.Text);
       test1 := Edit2.Text;
       test2 := Edit3.Text;
   end;
  dList.add(Tester);
  WriteToFile;
  ReadFromFile;
end;

procedure WriteToFile();
var
  i : integer;
begin
  stream := TFileStream.Create('222.dat', fmCreate);
  for i := 0 to dList.Count - 1 do
  begin
      Tester := nPointer(dList.Items[i]);
      stream.WriteBuffer(Tester, SizeOf(TNEWREC));
  end;
   stream.free;
end;

{а считать из файла не получаеться :-( }

procedure ReadFromFile();
var
  i : integer;
begin
  try
      stream := TFileStream.Create('222.dat', fmOpenRead);
  except
      Exit;
  end;
  new(Tester);
  for i := 1 to stream.size do
  begin
      stream.ReadBuffer(Tester, SizeOf(TNEWREC));
      dList.add(Tester);
  end;
  stream.free;
end;


chili   (2005-07-26 18:04:00) [1]

ловил но исправил


han_malign   (2005-07-26 17:46:00) [2]

Угу, а EReadError на stream.ReadBuffer(Tester, SizeOf(TNEWREC)) еще не словил?


chili   (2005-07-26 17:43:00) [3]

han_malign ©   (26.07.05 17:37) [13]

Большое Вам спасибо, но я уже разобрался Digitman уже меня явно носом ткнул :))))


han_malign   (2005-07-26 17:37:00) [4]

 for i := 1 to stream.size do
 begin
     stream.ReadBuffer(Tester, SizeOf(TNEWREC));
     dList.add(Tester);
 end;

- тогда уж либо
for i := 1 to stream.size div SizeOf(TNEWREC)do
либо

var Tester: TNEWREC;
    pTester: nPointer;
begin
........
  while stream.Read(Tester, SizeOf(TNEWREC)) = SizeOf(TNEWREC) do
  begin
     New(pTester);
     pTester^ := Tester;
     dList.add(pTester);
  end;
........


Digitman   (2005-07-26 17:29:00) [5]


> chili   (26.07.05 17:27) [11]


носи не стаптывай

и помни при этом - к каким-то там твоим "потокам" ЭТО не имеет НИ малейшего отношения) ... ЭТО - чистой воды ПАСКАЛЬ.

как только ты это осознаешь, тебе будет божественное откровение))


chili   (2005-07-26 17:27:00) [6]

Digitman ©   (26.07.05 17:22) [10]

Спасибо что Вы не только много (не поделу) говорите :-)))

Еще раз спасибо..


Digitman   (2005-07-26 17:22:00) [7]


> как в моем случае передать переменную НЕуказательного типа


разыменование применить ... "галку" влупить сразу же за именем идентификатора переменной указ.типа ... нонсенс разве ?


Digitman   (2005-07-26 17:21:00) [8]


> chili   (26.07.05 17:18) [7]


в какомслучае ?)

ты этих "случаев" в теме уже изрядно наплодил)

а про Паскаль при том напрочь забыл)

если вообще знал)


chili   (2005-07-26 17:20:00) [9]

уже все попробывал но работать не хочет :((((


chili   (2005-07-26 17:18:00) [10]

это понятно, а как в моем случае передать переменную НЕуказательного типа?????


Digitman   (2005-07-26 17:16:00) [11]


> chili   (26.07.05 17:12) [5]
> Почему


потому что в этом случае 1-м параметром ты передаешь переменную НЕуказательного типа


chili   (2005-07-26 17:12:00) [12]

Почему тогда к примеру так все работает??

TRRRR = record
   test1 : string[50];
   test2 : string[50];
 end;

var
 RRR : TRRRR;
 Stream: TFileStream;

procedure Write();
begin
 Stream := TFileStream.Create('c:\test.dat', fmCreate);
 RRR.test1 := 'lala';
 RRR.test1 := 'lala';
 Stream.WriteBuffer(RRR, SizeOf(TRRR));
 Stream.Free;
end;


Reindeer Moss Eater   (2005-07-26 17:04:00) [13]

Смотри в хелпе описание первого параметра у TStream.WriteBuffer


chili   (2005-07-26 17:03:00) [14]

а как написать то что я хочу???


Reindeer Moss Eater   (2005-07-26 17:02:00) [15]

{а считать из файла не получаеться :-( }

Получается.
Просто ты в файл пишешь не то, что хочешь.


chili   (2005-07-26 17:01:00) [16]

Что я делаю неправильно?


Наверх

Титульная страница Поиск, карта сайта Написать письмо