Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2004.04.04;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.035 c
8-1070004089
user
2003-11-28 10:21
2004.04.04
Как удалить определенное кол-во секунд из .wav файла


3-1078594297
Nikis
2004-03-06 20:31
2004.04.04
Таблица DOS-кодировки


1-1079608292
argom
2004-03-18 14:11
2004.04.04
Как в моей проге отследить команду "Свернуть все окна"


3-1078875784
Anarki
2004-03-10 02:43
2004.04.04
Как загрузить все данные одного поля в Combobox?


3-1078331930
Fixxxer
2004-03-03 19:38
2004.04.04
вопрос по Quick Report





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский