Форум: "Основная";
Текущий архив: 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