Форум: "Начинающим";
Текущий архив: 2008.01.27;
Скачать: [xml.tar.bz2];
ВнизTMemoryStream - копировать, сохранить Найти похожие ветки
← →
Evgenyy (2007-12-10 09:09) [0]надо из класса скопировать в локальные переменные
var
N:TMemoryStream;
p1,p2:pointer;
....действия...
New(p1,N.setsize); // выделяем память для копирования из TMemoryStream;
.... копируем в p1
....действия...
инициализация p2
....p2 сохраняем в TMemoryStream;
память по p2 может быть больше чем была в классе,
как корректно то сбросить и записать новые данные ?
← →
Сергей М. © (2007-12-10 09:24) [1]N.Size := размер блока памяти, на который указывает p2
← →
Palladin © (2007-12-10 10:07) [2]1. максимальное быстродействие
Type
TMS=Class(TMemoryStream)
Public
Procedure SP(p:Pointer;s:Integer);
End;
Procedure Tmm.SP;
Begin
SetPointer(p,s);
End;
p1:=N.Memory;
TMS(N).SetPointer(p2,sizeP2);
2.GetMem(p1,N.Size);
Move(N.Memory^,p1^,N.Size);
N.Size:=sizeP2;
Move(p2^,N.Memory^,sizeP2;
3.N.Seek(0,soFromBeginning);
GetMem(p1,N.Size);
N.Read(p1^,N.Size);
N.Clear;
N.Write(p2^,sizeP2);
← →
Palladin © (2007-12-10 10:09) [3]что то переопечатался в 1.
Type
TMS=Class(TMemoryStream)
Public
Procedure SP(p:Pointer;s:Integer);
End;
Procedure TMS.SP;
Begin
SetPointer(p,s);
End;
p1:=N.Memory;
TMS(N).SP(p2,sizeP2);
← →
Evgenyy (2007-12-25 10:27) [4]Вроде понятно, попробывал без класса,
необязательно быстро - неработает что-то,но ошибок невыдаетvar
GlobPo:pointer;
size:word;
{если заблокировано куда писать - пишем временно в память}
if FlashBlock=false then Stream.SaveToFile("temp")
else begin
GetMem(p,Stream.Size);
GlobPo:=p;
size:=Stream.Size;
end;
{...здесь куча кода..}
{грузим из темпа - если заблокирована флешка- значит темп у нас в памяти}
if FlashBlock=false then Stream.LoadFromFile("temp")
else begin
Stream.Size:=Size;
Move(Stream.Memory^,p^,Stream.Size);
end;
{....здесь куча кода....}
{удаляем файл, если заблокировано - значит очищаем память}
if FlashBlock=false then DeleteFile("temp")
else begin
Dispose(p);
p:=nil;
size:=0;
end;
← →
Сергей М. © (2007-12-25 10:39) [5]Непонятны все эти приседания с "блокированием" и двойной буферизацией данных (в памяти, указанной в p, и в памяти, распределенной самим MemoryStream).
Что мешает обойтись одним толькот TMemoryStream ?
← →
Evgenyy (2007-12-25 22:57) [6]этот код разнесен по всей программе и работает нормально
поток скидывает на диск, пока в другой части не понабятся эти данные
данные на самом деле не одни как показано одним именем "temp"
Завел ключик а если запись на флешке не возможна
или если возможна то хранить в памяти данные
при крахе мусора никакого не будет
← →
Сергей М. © (2007-12-26 08:30) [7]Ничего не понял.
> при крахе мусора никакого не будет
При каком "крахе" ? Какого "мусора" ?
← →
Evgenyy (2007-12-26 13:55) [8]если приложение прибивается или просто вытаскивается флешка на
которой она сама и пишет на той же диск
после вытаскивания флешки - на флешке файлы temp000001 - temp000999
весом под сотни метров
← →
Сергей М. © (2007-12-26 14:00) [9]
> если приложение прибивается
А кем и зачем оно "прибивается" ?
> или просто вытаскивается флешка
Это проблемы юзера, а не программера.
Сказано же черным по-русски - сначала остановить устройство, и только потом физически его выковыривать.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2008.01.27;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.008 c