каталоги и файлы

Тема в разделе "Delphi - Система", создана пользователем Sliva, 11 май 2006.

Статус темы:
Закрыта.
  1. Sliva

    Sliva Гость

    Заранее извиняюсь за не очень умный вопрос :) Объясните, пожалуйста, что мы понимаем под каталогом?
     
  2. Alex Death

    Alex Death Гость

    Файл в котором список файлов
     
  3. Sliva

    Sliva Гость

    А что имеется ввиду под вложенными файлами? И вообще где можно почитать про файлы и каталоги, работу с ними. Скиньте, плиз, ссылку!
     
  4. Alex Death

    Alex Death Гость

    Простите, может я не догоняю.. что за вложенные файлы? Первый раз слышу.
     
  5. Shader88

    Shader88 Гость

    Конкретнее можно сказать что нужно????
    С файлами и папками можно работать средствами Delphi(что не советую) а можно через API в Delphi! :)
     
  6. Sliva

    Sliva Гость

    Мне нужно работать с вкладкой Win32, как я поняла со стандартными функциями типа IsDirNotation, GetDirectoryName...
    Вообще задача стоит так:
    Есть два каталога. Посчитать общий объем, содержащихся в них файлов. :)
     
  7. Shader88

    Shader88 Гость

    Как вкладка Win32 соотноситься с файлами и каталогами, я слабо себе представляю..... :)

    А так код который определяет размер ВСЕГО каталога:
    Код (Text):
    var
    DirBytes: Integer;

    procedure DirSize(Dir:string);
    var
    SearchRec : TSearchRec;
    Separator : string;
    begin

    if Copy(Dir,Length(Dir),1)='\'
    then Separator := ''
    else Separator := '\';

    if FindFirst(Dir+Separator+'*.*',faAnyFile,SearchRec) = 0
    then begin
    if FileExists(Dir+Separator+SearchRec.Name)
    then DirBytes := DirBytes + SearchRec.Size
    else if DirectoryExists(Dir+Separator+SearchRec.Name)
    then if (SearchRec.Name<>'.') and (SearchRec.Name<>'..')
    then DirSize(Dir+Separator+SearchRec.Name);
    while FindNext(SearchRec) = 0 do
    begin
    if FileExists(Dir+Separator+SearchRec.Name)
    then DirBytes := DirBytes + SearchRec.Size
    else if DirectoryExists(Dir+Separator+SearchRec.Name)
    then if (SearchRec.Name<>'.') and (SearchRec.Name<>'..')
    then DirSize(Dir+Separator+SearchRec.Name);
    end;
    end;
    FindClose(SearchRec);
    end;
    Для того чтобы определить размер ТОЛЬКО файлов в каталоге
    Код (Text):
    var
    DirBytes: Integer;

    procedure DirSize(Dir:string);
    var
    SearchRec : TSearchRec;
    Separator : string;
    begin

    if Copy(Dir,Length(Dir),1)='\'
    then Separator := ''
    else Separator := '\';

    if FindFirst(Dir+Separator+'*.*',faAnyFile,SearchRec) = 0
    then begin
    if FileExists(Dir+Separator+SearchRec.Name)
    then DirBytes := DirBytes + SearchRec.Size;

    while FindNext(SearchRec) = 0 do
    if FileExists(Dir+Separator+SearchRec.Name)
    then DirBytes := DirBytes + SearchRec.Size;
    end;
    FindClose(SearchRec);
    end;
    Возвращаемый результат выполнения в БАЙТАХ. Прошу обратить внимание. ;)

    Но сразу хочу оговориться, код совсем не оптимизирован!!!!! :unsure:
    Поэтому если критично выполнение по времени, то нужно улучшать! :)
     
  8. Sliva

    Sliva Гость

    Спасибо, попробую :)
     
  9. mike.dld

    mike.dld Гость

    Ай-ай-ай, Shader88... Кто использует для такого случая процедуры и глобальные переменные? В функцию бы это нужно!

    Что касается оптимизации:
    Код (Text):
    function DirSize(Dir:string): integer;
    var
    SearchRec : TSearchRec;
    begin
    if not (Dir[Length(Dir)] in ['\','/'])
    Dir := Dir + '\';
    Result := 0;

    if FindFirst(Dir+'*.*',faAnyFile,SearchRec) = 0
    then begin
    repeat
    if SearchRec.Attr and faDirectory <> 0
    then inc(Result,DirSize(Dir+SearchRec.Name))
    else if SearchRec.Attr and faVolumeID = 0
    then inc(Result,SearchRec.Size)
    until FindNext(SearchRec) <> 0;
    FindClose(SearchRec);
    end;
    end;
     
  10. Sliva

    Sliva Гость

    :( Спасибо, помогаете!
     
  11. Shader88

    Shader88 Гость

    МОЛОДЦА!!!! :(

    Я просто думал что этот пост больше не кто не читает! Вот и решил проверить! ;)

    Конечно, же как функцию....
    Даже я больше могу сказать, как мне это кажеться, что девушка занимаеться написанием программы аля WinCommander, просто молчит! :)

    Еще раз пасибо! :)
     
  12. Sliva

    Sliva Гость

    Ну спасибо! :) Это задача на операционные системы. И вот этот цикл:
    repeat
    if SearchRec.Attr and faDirectory <> 0
    then inc(Result,DirSize(Dir+SearchRec.Name))
    else if SearchRec.Attr and faVolumeID = 0
    then inc(Result,SearchRec.Size)
    until FindNext(SearchRec) <> 0;
    Он не считает размер вложенных файлов. Видеть их видит, но не считает.
     
  13. Sliva

    Sliva Гость

    Я так понимаю, что это -
    Код (Text):
    if FileExists(Dir+Separator+SearchRec.Name)
    then DirBytes := DirBytes + SearchRec.Size
    else if DirectoryExists(Dir+Separator+SearchRec.Name)
    then if (SearchRec.Name<>'.') and (SearchRec.Name<>'..')
    then DirSize(Dir+Separator+SearchRec.Name);
    while FindNext(SearchRec) = 0 do
    begin
    if FileExists(Dir+Separator+SearchRec.Name)
    then DirBytes := DirBytes + SearchRec.Size
    else if DirectoryExists(Dir+Separator+SearchRec.Name)
    then if (SearchRec.Name<>'.') and (SearchRec.Name<>'..')
    then DirSize(Dir+Separator+SearchRec.Name);
    просто считает размер файлов, которые имеют 1-2 вложенных и их глубина = 1. :)
     
  14. mike.dld

    mike.dld Гость

    Моя вина - не проверил код перед тем как сюда написать. Исправление:
    Код (Text):
    function DirSize(Dir: string): integer;
    var
    SearchRec : TSearchRec;
    begin
    if not (Dir[Length(Dir)] in ['\','/']) then
    Dir := Dir + '\';
    Result := 0;
    if FindFirst(Dir+'*.*',faAnyFile,SearchRec) = 0
    then begin
    repeat
    if (SearchRec.Attr and faDirectory <> 0) and (SearchRec.Name <> '.')
    and (SearchRec.Name <> '..')
    then inc(Result,DirSize(Dir+SearchRec.Name))
    else if SearchRec.Attr and faVolumeID = 0
    then inc(Result,SearchRec.Size)
    until FindNext(SearchRec) <> 0;
    FindClose(SearchRec);
    end;
    end;
     
  15. Barmutik

    Barmutik Гость

    Такой способ определения размера дирректории будет работать очень долго .. эт его большой минус ...
     
  16. Sliva

    Sliva Гость

    Я вам очень благодарна! ;) А не подскажите еще как сделать тоже самое, но считая, что два файла, которые даны - это потоки? :unsure:
    Понимаете, первый курс... :blink:
     
  17. Sliva

    Sliva Гость

    Даже не так сформулировала :) Два каталога - это потоки. Help, please!
     
  18. Barmutik

    Barmutik Гость

    От переформулирования понятней не стало ....
     
  19. Shader88

    Shader88 Гость

    Согласен! :)
     
  20. Sliva

    Sliva Гость

    Тем не менее, задача стоит так. Два каталога - это два потока и с ними надо работать.
     
Загрузка...
Похожие Темы - каталоги файлы
  1. seoman2
    Ответов:
    4
    Просмотров:
    1.786
  2. PavelT100
    Ответов:
    7
    Просмотров:
    5.168
  3. lmike
    Ответов:
    27
    Просмотров:
    239
  4. garrick
    Ответов:
    25
    Просмотров:
    655
  5. sgfsdg
    Ответов:
    1
    Просмотров:
    423
Статус темы:
Закрыта.

Поделиться этой страницей