Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.04.04;
Скачать: CL | DM;

Вниз

Типизированный поток.   Найти похожие ветки 

 
opoloxai ©   (2004-03-11 19:08) [0]

Добрый день.
Можно ли создать типизированный поток ( к примеру создаю свой тип TMyType = record (...) и я хочу создать поток переменных этого типа)?
Заранее спасибо.


 
Юрий Зотов ©   (2004-03-11 19:19) [1]

Дык... наследуйтесь от TxxxStream - и вперед. Или посмотрите, как реализован TxxxStream и напишите свой аналог.


 
Verg ©   (2004-03-11 19:55) [2]

Уверен, что это не неужно. Никаких "типизированных" потоков.
Лень умножать на sizeof(TMyType) ?
Создавать "типизированный" stream будет хлопотнее.


 
Юрий Зотов ©   (2004-03-11 20:00) [3]

> Verg ©   (11.03.04 19:55) [2]

Все может быть не так просто. Например, запись TMyType может содержать длинные строки или иные указатели.


 
opoloxai ©   (2004-03-12 10:05) [4]

Спасибо всем.
Может я заранее пошел по ложному пути и все намного проще, может есть более простой способ? Моя задача вот в чем:
0) TFileNameStream, TFilePathStream, TFileSizeStream: TStrings;
1) TFileNameStream = TStrings.Creat;
  .....
2) пробегаю по папкам HDD и записываю информацию о файлах в трёх соответствующих потоках.
3) суммирую необходимые размеры файлов и в визуальном компоненте вывожу результаты пользователю.
Вопрос : очень неудобно:
1) таскать 3 потка (а может и больше, если захотеть смотреть и остальные свойства). Ведь проще создать тип
  TmyType = record
     Name, Path: String;
     Size: Integer;
     ReadOnly: Boolean;
     .....
  end;
и пользуясь им получать полную информацию о файле.
2) TFileSizeStream это ведь тип Integer и перегонять его в String туда и обратно очень не охото.

Может есть более простой способ?


 
MetalFan ©   (2004-03-12 10:12) [5]

причем тут TStrings и потоки?


 
Erik ©   (2004-03-12 10:41) [6]

To opoloxai
Да дорогой ты попал, сейчас тебя отделают мастера по полной пограмме. Конечно ты перепутал все, что можно. Поясняю:
TStrings это не потокоый клас а список строк, причем абстрактный! Значить работать такое TFileNameStream = TStrings.Creat небудет. Надо создовать от TStringsList.
Во вторых пример потокового класа TMemoryStream.
Больше так необзывайся иначе придет Digitman и он тебя ..... :)
P.S.
 Скорее всего тебе удобее всего будет использовать TList.
PmyType = ^TmyType;
Добавление нового элемента:
New(PmyType);
List.Add(PmyType);
Обращение:
PmyType(List[i]).Size;
Удаление:
Dispose(PmyType(List[i]));
List.Delete(i);


 
panov ©   (2004-03-12 10:47) [7]

Конечная цель так и не сформулирована...
Поэтому можно только предполагать, что нужно автору - или посчитать объем файлов на диске, или получит при этом еще и все имена файлов с путями.


 
opoloxai ©   (2004-03-12 10:58) [8]

Спасибо, Erik.
Есть папка с технич. документацией
..\\Telefons\model1\type1
                  \type2
           \model2\type1
                  \type2
..\\TV\...
размером в 10 Гбайт.
Мне нужно получить размер папки \\Telefons (\\TV и т.д.) с учётем всех файлов в данной папке.


 
panov ©   (2004-03-12 11:49) [9]


procedure GetDirSize(const aPath: String;var SizeDir: Int64);
var
 SR: TSearchRec;
 tPath: String;
begin
 tPath := IncludeTrailingBackSlash(aPath);
 if FindFirst(tPath+"*.*",faAnyFile,SR)=0 then
 begin
   try
     repeat
       if (SR.Name=".") or (SR.Name="..") then Continue;
       if (SR.Attr and faDirectory)<>0 then
       begin
         GetDirSize(tPath+SR.Name,SizeDir);
         Continue;
       end;
       SizeDir := SizeDir +
                 (SR.FindData.nFileSizeHigh shl 32)+
                 SR.FindData.nFileSizeLow;
     until FindNext(SR)<>0;
   finally
     Sysutils.FindClose(SR);
   end;
 end;
end;


Вызов:


procedure TForm1.Button1Click(Sender: TObject);
var
SizeDir: Int64;
begin
 SizeDir := 0;
 GetDirSize("c:\Program FIles",SizeDir);
 ShowMessage(IntToStr(SizeDir));
end;



Страницы: 1 вся ветка

Текущий архив: 2004.04.04;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.052 c
3-1078284978
Andrey V.
2004-03-03 06:36
2004.04.04
Shadow file.


4-1075401649
myst
2004-01-29 21:40
2004.04.04
память выделенная процессу


1-1079582732
DNS
2004-03-18 07:05
2004.04.04
Поиск в StringGrid?


1-1079342197
Begin
2004-03-15 12:16
2004.04.04
Обработка сообщений главной формы


1-1079688540
Лана Розанова
2004-03-19 12:29
2004.04.04
Имитация TAB