Главная страница
    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.038 c
9-1063179737
Omar2002
2003-09-10 11:42
2004.04.04
Ошибки в сетевой игре


14-1079093706
Murad
2004-03-12 15:15
2004.04.04
"include" в XML


4-1074685059
Alibaba
2004-01-21 14:37
2004.04.04
Thread, Excel


1-1079032336
Thomas Brandon
2004-03-11 22:12
2004.04.04
Ожидание окончания Thread a.


1-1079621058
ZZZ_AC
2004-03-18 17:44
2004.04.04
Не могу удалить папки





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