Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.89/9: Рейтинг темы: голосов - 9, средняя оценка - 4.89
0 / 0 / 1
Регистрация: 15.04.2013
Сообщений: 184
1

Работа с файловой системой. Поиск файлов, определение размеров файлов и подсчёт среднего арифметического размера.

23.10.2013, 19:42. Просмотров 1805. Ответов 4
Метки нет (Все метки)

Всем привет! Помогите пожалуйста!
Вообщем необходимо реализовать программу , которая будет содержать модуль иерархического поиска файлов по адресу указанному в командной строке, и найти средний арифметический размер файла внутри исходной папки.
Подскажите кто нибудь как это вообще сделать или ссылку киньте где можно прочитать про взаимодействие с файловой системой , что то я вообще не могу сообразить как работать с файловой системой
Спасибо всем заранее!
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
23.10.2013, 19:42
Ответы с готовыми решениями:

Работа с файловой системой. Удаление файлов по диапазону размера
Помогите дописать программу. Ввожу диапазон, но удаляет все файлы подскажите что не так. Желательно...

Работа с файловой системой. Поиск файлов, удаление файл размер которого превышает 100 килобайт
Всем привет! Помогите пожалуйста! Вообщем необходимо реализовать программу , которая будет...

Подсчет размеров файлов в байтах. Ошибки вычисления если файлов значительно количество
Здравствуйте. Рекурсивная функция пробегает по директории и поддиректориям, если встречает файл,...

Работа со столбцами, проверка сортировки, подсчет среднего арифметического
Здравствуйте. В пайтоне вообще не але, никак не соображаю. Нужно решить задачку: Дана вещественная...

4
12953 / 5805 / 1704
Регистрация: 19.09.2009
Сообщений: 8,807
24.10.2013, 01:38 2
Для поиска файлов можно применить функции FindFirst()/FindNext()/FindClose().
На форму надо положить:
Button1: TButton;
Memo1: TMemo;
Для кнопки Button1 создать обработчик события OnClick и оформить код, как показано ниже.

1. Если размер каждого из файлов не превышает 2 Гбайт:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
uses
  FileCtrl;
 
var
  gPath : String = ''; //Путь к папке.
 
//Если размер каждого файла не превышает 2 Гбайт.
procedure TForm1.Button1Click(Sender: TObject);
var
  Sr : TSearchRec;
  Attr, Cnt : Integer;
  SizeSum : Int64;
begin
  //Путь к папке, в которой нужно произвести поиск. Начальное значение выбираем
  //равным пути к той папке, в которой расположена наша программа.
  if gPath = '' then gPath := ExtractFilePath(ParamStr(0));
  //Диалог выбора папки.
  if not SelectDirectory('Выбор папки', '', gPath) then Exit;
  //Если конечный слеш отсутствует, то добавляем его.
  gPath := IncludeTrailingPathDelimiter(gPath);
 
  Memo1.Lines.Add('------------------------------');
  Memo1.Lines.Add('Папка: ' + gPath);
  //Атрибуты - все файлы, исключая тома и папки.
  Attr := faAnyFile - faVolumeID - faDirectory;
  Cnt := 0; //Счётчик найденных файлов.
  SizeSum := 0; //Суммарный размер файлов.
  try
    if FindFirst(gPath + '*', Attr, Sr) = 0 then
    repeat
      Inc(Cnt);
      SizeSum := SizeSum + Sr.Size;
      Memo1.Lines.Add('Размер, байт: ' + IntToStr(Sr.Size) + ', Имя: ' + Sr.Name);
    until FindNext(Sr) <> 0;
  finally
    FindClose(Sr);
  end;
 
  //Ответ.
  Memo1.Lines.Add('---');
  if Cnt > 0 then begin
    Memo1.Lines.Add('Всего файлов: ' + IntToStr(Cnt));
    Memo1.Lines.Add('Суммарный размер файлов, байт: ' + FloatToStr(SizeSum));
    Memo1.Lines.Add('Средний размер файла, байт: ' + FloatToStr(SizeSum/Cnt));
  end
  else
    Memo1.Lines.Add('В папке нет ни одного файла.');
end;
---
2. Если могут встретиться файлы с размером больше 2 Гбайт:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
uses
  FileCtrl;
 
var
  gPath : String = ''; //Путь к папке.
 
//Если могут встретиться файлы с размером больше 2 Гбайт.
procedure TForm1.Button1Click(Sender: TObject);
var
  Sr : TSearchRec;
  Attr, Cnt : Integer;
  Size, SizeSum : Int64;
begin
  //Путь к папке, в которой нужно произвести поиск. Начальное значение выбираем
  //равным пути к той папке, в которой расположена наша программа.
  if gPath = '' then gPath := ExtractFilePath(ParamStr(0));
  //Диалог выбора папки.
  if not SelectDirectory('Выбор папки', '', gPath) then Exit;
  //Если конечный слеш отсутствует, то добавляем его.
  gPath := IncludeTrailingPathDelimiter(gPath);
 
  Memo1.Lines.Add('------------------------------');
  Memo1.Lines.Add('Папка: ' + gPath);
  //Атрибуты - все файлы, исключая тома и папки.
  Attr := faAnyFile - faVolumeID - faDirectory;
  Cnt := 0; //Счётчик найденных файлов.
  SizeSum := 0; //Суммарный размер файлов.
  try
    if FindFirst(gPath + '*', Attr, Sr) = 0 then
    repeat
      Inc(Cnt);
      {Размер файла в байтах. Размер представляет собой целое число типа Int64.
      Int64 - это целочисленный тип со знаком, который во внутреннем представлении
      занимает 8 байт. Значение этого типа записано в структуре Sr в виде двух переменных:
      Sr.FindData.nFileSizeHigh - содержит 4 старших байта;
      Sr.FindData.nFileSizeLow - содержит 4 младших байта.}
      Size := Int64(Sr.FindData.nFileSizeHigh) shl 32 + Sr.FindData.nFileSizeLow;
      SizeSum := SizeSum + Size;
      Memo1.Lines.Add('Размер, байт: ' + IntToStr(Size) + ', Имя: ' + Sr.Name);
    until FindNext(Sr) <> 0;
  finally
    FindClose(Sr);
  end;
 
  //Ответ.
  Memo1.Lines.Add('---');
  if Cnt > 0 then begin
    Memo1.Lines.Add('Всего файлов: ' + IntToStr(Cnt));
    Memo1.Lines.Add('Суммарный размер файлов, байт: ' + FloatToStr(SizeSum));
    Memo1.Lines.Add('Средний размер файла, байт: ' + FloatToStr(SizeSum/Cnt));
  end
  else
    Memo1.Lines.Add('В папке нет ни одного файла.');
end;
1
0 / 0 / 1
Регистрация: 15.04.2013
Сообщений: 184
24.10.2013, 16:33  [ТС] 3
Спасибо вам большое !!! А как нибудь можно сделать не используя
Button1: TButton;
Memo1: TMemo; ?
а за функции спасибо огромное!!!!
0
12953 / 5805 / 1704
Регистрация: 19.09.2009
Сообщений: 8,807
25.10.2013, 09:09 4
В виде консольного приложения:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
program Project1;
 
{$APPTYPE CONSOLE}
 
uses
  SysUtils, Windows, FileCtrl;
 
var
  Sr : TSearchRec;
  Attr, Cnt : Integer;
  Size, SizeSum : Int64;
  Res : Boolean;
  S, Path : String;
begin
  {Переключение окна консоли на кодовую страницу CP1251 (Win-1251).
  Если после переключения русские буквы показываются неверно,
  следует открыть системное меню консольного окна - щелчком мыши в левом
  верхнем углу окна консоли и выбрать:
  Свойства - закладка "Шрифт" - выбрать шрифт: "Lucida Console".}
  SetConsoleCP(1251);
  SetConsoleOutputCP(1251);
 
  repeat
    Writeln('------------------------------');
    repeat
      Writeln('Задайте путь к папке, в которой следует выполнить поиск:');
      Readln(Path);
      //Если конечный слеш отсутствует, то добавляем его.
      Path := IncludeTrailingPathDelimiter(Path);
      //Проверка существования пути.
      Res := DirectoryExists(Path);
      if not Res then
        Writeln('Заданный путь не найден. Повторите ввод.');
    until Res;
    //Атрибуты - все файлы, исключая тома и папки.
    Attr := faAnyFile - faVolumeID - faDirectory;
    Cnt := 0; //Счётчик найденных файлов.
    SizeSum := 0; //Суммарный размер файлов.
    try
      if FindFirst(Path + '*', Attr, Sr) = 0 then
      repeat
        Inc(Cnt);
        {Размер файла в байтах. Размер представляет собой целое число типа Int64.
        Int64 - это целочисленный тип со знаком, который во внутреннем представлении
        занимает 8 байт. Значение этого типа записано в структуре Sr в виде двух переменных:
        Sr.FindData.nFileSizeHigh - содержит 4 старших байта;
        Sr.FindData.nFileSizeLow - содержит 4 младших байта.}
        Size := Int64(Sr.FindData.nFileSizeHigh) shl 32 + Sr.FindData.nFileSizeLow;
        SizeSum := SizeSum + Size;
        Writeln('Размер, байт: ', Size, ', Имя: ', Sr.Name);
      until FindNext(Sr) <> 0;
    finally
      SysUtils.FindClose(Sr); //"SysUtils." - т. к., в модуле Windows объявлена функция с таким же именем.
    end;
 
    //Ответ.
    Writeln('---');
    if Cnt > 0 then begin
      Writeln('Всего файлов: ', Cnt);
      Writeln('Суммарный размер файлов, байт: ', SizeSum);
      Writeln('Средний размер файла, байт: ', SizeSum/Cnt:0:3);
    end
    else
      Writeln('В папке нет ни одного файла.');
 
    Writeln('Повторить - Enter. Выход - любой символ + Enter.');
    Readln(S);
  until S <> '';
end.
1
0 / 0 / 1
Регистрация: 15.04.2013
Сообщений: 184
25.10.2013, 19:34  [ТС] 5
Огромное спасибо!!!)
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
25.10.2013, 19:34

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Рассчет среднего значения размеров файлов папки
Написать программу (скрипт) расчета среднего значения размеров файлов папки (Сценарий WSH) Как...

Поиск файлов и ошибка файловой системы
Всем здравия и приятного денечка. Имеется код: Imports System.Windows.Forms Imports...

Определение нужной компоненты для Вывода файлов и их размеров, типа
Вопрос вот в чём! Как сделать так чтобы у меня при выводе файлов была такая же таблица как в...

Подсчёт среднего арифметического матрицы, и отклонения от среднего у элементов первой строки
Дана целочисленная матрица. Составить программу подсчёта среднего арифметического значения матрицы....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.