Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ Работа с каталогами и файлами.

Автор: Катя 26.11.2005 1:07

Помогите с написанием программы,а то в понедельник сдавать надо плиз.

Программа начинает работу в заданном каталоге и спускается по дереву каталогов,записывая по пути размеры всех встретившихся ей файлов.Закончив сканирование каталога,программа должна распечатать гистограмму размеров файлов,используя шаг гистограммы в качестве параметра(например, при шаге 1024,файлы размером от 0 до 1023 байт попадают в один интервал,от 1024 до 2047 байт в другой и т.д.)

Автор: volvo 26.11.2005 2:28

Уже было где-то ... Но в общем случае - FindFirst/FindNext, проверяешь очередное имя файла на атрибут "каталог", и если этот атрибут установлен - запускаешь Ее Величество Рекурсию wink.gif

Автор: volvo 26.11.2005 2:38

Вот... нашел, где это было:
http://forum.pascal.net.ru/index.php?showtopic=3584&view=findpost&p=32237

Чуть-чуть подправить...

Автор: Катя 27.11.2005 22:15

Как сделать так что бы файлы выводились поблочно(по размерам) от 0-1023, 1023-2047....

Автор: klem4 29.11.2005 0:37

Вот сделал набросок .. но с ограничениями ... запускать программу с такими данными будет полезно только для файлов, размером от 1 до 20 мб, если чемто поможет, хорошо smile.gif Если надо можно и гистограмму сделать ...

{$r-}
uses crt, dos;

const
maxDegree = 19;
step = 1024 * 1024;

type

TLong = array[0..maxDegree] of byte;
var
startDir : string;

sizes : TLong;

procedure GetFiles(fn, dir : string; var L : TLong);
var
search : SearchRec;
begin

if dir[length(dir)] <> '\' then
dir := dir + '\';

FindFirst(dir + fn, AnyFile, search);

while dosError = 0 do begin
if search.attr <> $10 then begin
writeln(search.name:15, (search.size div step) : 10);
inc(L[search.size div step])
end;
FindNext(search);
end;

FindFirst(dir + '*.*', Directory, search);

while doserror = 0 do begin
if (search.attr and 16 <> 0) and (search.name[1] <> '.') then
GetFiles(fn, dir + search.name, L);
FindNext(search);
end;

end;

var
i : byte;
begin

clrscr;

FillChar(sizes, sizeof(sizes),0);

GetFiles('*.*','c:\Downloads\Music\Rok', sizes);

writeln;

for i := 1 to maxDegree do
if sizes[i] <> 0 then
writeln(i,' mb : ',sizes[i]);
readln;
end.




Эскизы прикрепленных изображений
Прикрепленное изображение

Автор: Катя 29.11.2005 0:50

Да пожалуйста сделай гистограмму, заранее спасибо!!!

Автор: volvo 29.11.2005 1:35

Катя, Горизонтальная ч/б гистограмма в текстовом режиме (шаг гистограммы = 100Кб, диапазон размеров файлов - от 100К до 2Мб)

Если надо добавить цвет - скажи, сделаем... yes2.gif


Прикрепленные файлы
Прикрепленный файл  katya.pas ( 1.53 килобайт ) Кол-во скачиваний: 253