Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
15-1198354859
I
2007-12-22 23:20
2008.01.27
Художественная литература на английском


2-1198489780
KV
2007-12-24 12:49
2008.01.27
Электронная библиотека


2-1198508759
Kvendi
2007-12-24 18:05
2008.01.27
Скриншот некого чужого окна


15-1198058066
Kerk
2007-12-19 12:54
2008.01.27
К проблеме ИИ


15-1198013928
Свой
2007-12-19 00:38
2008.01.27
Помогите с БДЕ и ASP в IIS





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский