![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Помогите разобраться с потоком [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]Что я делаю неправильно?