![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Потомок TFileStream
Vendict © (2006-07-15 17:46:00)Такая ситуация. Есть задумка. Создаётся потомок от TFileStream и переписывается так, чтобы при чтении и записи на лету расшифровывалось и зашифровывалось соответственно. Тут и появляются странные грабли.
Type
TBytes = array[0..MaxInt-1] of Byte;
TCriptoFile = class (TFileStream)
.....
Function Write(const Buffer; Count: Longint): Longint; override;
End;
.......
Var
b:TBytes;
Function TCriptoFile.Write;
Var
a:array of Byte;
i:integer;
// b:TBytes;
Begin
FillChar(b,SizeOf(b),0);
SetLength(a,Count);
For i:=0 to count-1 do
a[i]:=TBytes(Buffer)[i];
........// шифруем a по какому либо алгоритму
For i:=0 to count-1 do
b[i]:=a[i];
Inherited Write(b, Count);
End;
и самое странное. при попытке
Inherited Write(a, Count);
пишется чёрт знает что,
так же как написано выше, при вызове метода, например,
Memo.Lines.SaveToStream(FS)
возникает ошибка, что-то вроде "Write Stream Error", но файл нормально записывается. как данные грабли обойти ?
Vendict (2006-07-15 20:26:00) [1]Джо © (15.07.06 18:05) [1]
Result := inherited Write(b[0], Count);
не ожидал такого решения. только без[0]. нужен был "Result" ...
Ketmar (2006-07-15 20:09:00) [2]а почему бы не делать агрегирование? что-то вроде
constructor Create (aStream: TStream);
тогда можно любой поток кодировать.
Джо (2006-07-15 18:05:00) [3]
Result := inherited Write(b[0], Count);
?