Q&A

  • 디렉토리의 수를 카운트 하는 방법
디렉토리의 수를 카운트 하는 방법을 알고 싶습니다..

디렉토리의 수를 카운트 하는 함수는 없나여?..

고수님 플리즈..

*^^*



5  COMMENTS
  • Profile
    각시탈 2000.05.20 03:47
    권윤진 wrote:

    > 디렉토리의 수를 카운트 하는 방법을 알고 싶습니다..

    > 디렉토리의 수를 카운트 하는 함수는 없나여?..

    > 고수님 플리즈..

    > *^^*

    >



    도움이 되시길...

    항상 즐팅하세요...



    // 아래 예제의 Memo1 은 검사용이므로 디렉토리의 크기를 구하는

    // 과정을 보고자 할때는 주석을 여시면 됩니다unit Unit1;



    interface



    uses

    Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

    StdCtrls, FileCtrl;



    type

    TForm1 = class(TForm)

    DirectoryListBox1: TDirectoryListBox;

    Button1: TButton;

    Memo1: TMemo;

    procedure Button1Click(Sender: TObject);

    private

    { Private declarations }

    public

    { Public declarations }

    end;



    var

    Form1: TForm1;



    implementation

    {$R *.DFM}



    function GetDirectorySize(Dir: String): Longint;

    var

    SearchRec: TSearchRec;

    Separator: String;

    DirBytes: Longint;

    begin

    DirBytes := 0;



    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

    begin

    DirBytes := DirBytes + SearchRec.Size; // 현재 디렉토리의 파일 사이즈 합계

    // Form1.Memo1.Lines.Add(Dir+Separator+SearchRec.Name+' - '+IntToStr(SearchRec.Size)); // 파일 리스트 출력시 사용

    end

    else if DirectoryExists(Dir+Separator+SearchRec.Name) then

    begin

    if (SearchRec.Name <> '.') and (SearchRec.Name <> '..') then

    begin

    DirBytes := DirBytes + GetDirectorySize(Dir+Separator+SearchRec.Name); // 재귀적 호출로 하위 디렉토리 검색

    end;

    end;



    while FindNext(SearchRec) = 0 do

    begin

    if FileExists(Dir+Separator+SearchRec.Name) then

    begin

    DirBytes := DirBytes + SearchRec.Size;

    // Form1.Memo1.Lines.Add(Dir+Separator+SearchRec.Name+' - '+IntToStr(SearchRec.Size));

    end

    else if DirectoryExists(Dir+Separator+SearchRec.Name) then

    begin

    if (SearchRec.Name <> '.') and (SearchRec.Name <> '..') then

    begin

    DirBytes := DirBytes + GetDirectorySize(Dir+Separator+SearchRec.Name);

    end;

    end;

    end;

    end;

    FindClose(SearchRec);



    Result := DirBytes;

    end;



    procedure TForm1.Button1Click(Sender: TObject);

    begin

    // Memo1.Clear;

    ShowMessage(IntToStr(GetDirectorySize(DirectoryListBox1.Directory)));

    end;



    end.



    출처: 김영대님 홈페이지

  • Profile
    권윤진 2000.05.20 05:25
    각시탈님 감사드립니다..

    이대로 실행을 시켜봤습니다만..

    근데.. 에러가 몇개 있더구여.. 다시한번만 검토해주시면 감사하겟습니다..

    제가 넘 몰라서.. 그런거 일수도 있는데..





    각시탈 wrote:

    > 권윤진 wrote:

    > > 디렉토리의 수를 카운트 하는 방법을 알고 싶습니다..

    > > 디렉토리의 수를 카운트 하는 함수는 없나여?..

    > > 고수님 플리즈..

    > > *^^*

    > >

    >

    > 도움이 되시길...

    > 항상 즐팅하세요...

    >

    > // 아래 예제의 Memo1 은 검사용이므로 디렉토리의 크기를 구하는

    > // 과정을 보고자 할때는 주석을 여시면 됩니다unit Unit1;

    >

    > interface

    >

    > uses

    > Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

    > StdCtrls, FileCtrl;

    >

    > type

    > TForm1 = class(TForm)

    > DirectoryListBox1: TDirectoryListBox;

    > Button1: TButton;

    > Memo1: TMemo;

    > procedure Button1Click(Sender: TObject);

    > private

    > { Private declarations }

    > public

    > { Public declarations }

    > end;

    >

    > var

    > Form1: TForm1;

    >

    > implementation

    > {$R *.DFM}

    >

    > function GetDirectorySize(Dir: String): Longint;

    > var

    > SearchRec: TSearchRec;

    > Separator: String;

    > DirBytes: Longint;

    > begin

    > DirBytes := 0;

    >

    > 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

    > begin

    > DirBytes := DirBytes + SearchRec.Size; // 현재 디렉토리의 파일 사이즈 합계

    > // Form1.Memo1.Lines.Add(Dir+Separator+SearchRec.Name+' - '+IntToStr(SearchRec.Size)); // 파일 리스트 출력시 사용

    > end

    > else if DirectoryExists(Dir+Separator+SearchRec.Name) then

    > begin

    > if (SearchRec.Name <> '.') and (SearchRec.Name <> '..') then

    > begin

    > DirBytes := DirBytes + GetDirectorySize(Dir+Separator+SearchRec.Name); // 재귀적 호출로 하위 디렉토리 검색

    > end;

    > end;

    >

    > while FindNext(SearchRec) = 0 do

    > begin

    > if FileExists(Dir+Separator+SearchRec.Name) then

    > begin

    > DirBytes := DirBytes + SearchRec.Size;

    > // Form1.Memo1.Lines.Add(Dir+Separator+SearchRec.Name+' - '+IntToStr(SearchRec.Size));

    > end

    > else if DirectoryExists(Dir+Separator+SearchRec.Name) then

    > begin

    > if (SearchRec.Name <> '.') and (SearchRec.Name <> '..') then

    > begin

    > DirBytes := DirBytes + GetDirectorySize(Dir+Separator+SearchRec.Name);

    > end;

    > end;

    > end;

    > end;

    > FindClose(SearchRec);

    >

    > Result := DirBytes;

    > end;

    >

    > procedure TForm1.Button1Click(Sender: TObject);

    > begin

    > // Memo1.Clear;

    > ShowMessage(IntToStr(GetDirectorySize(DirectoryListBox1.Directory)));

    > end;

    >

    > end.

    >

    > 출처: 김영대님 홈페이지

  • Profile
    강민주 2000.05.20 03:44
    권윤진 wrote:

    > 디렉토리의 수를 카운트 하는 방법을 알고 싶습니다..

    > 디렉토리의 수를 카운트 하는 함수는 없나여?..

    > 고수님 플리즈..

    > *^^*

    >



    안녕하세요 ^^

    디렉토리 수를 구하실려면.. findfirst, findnext로 구하심 될것 같군요.

    참고하세요.

    var

    sr: TSearchRec;

    begin

    FindFirst('c:*.*', faDirectory, sr);

    while done = 0 do

    begin

    ListBox1.Items.Add(sr.name);

    done := FindNext(sr);

    end;

    end;



    그럼..20000.

  • Profile
    권윤진 2000.05.20 05:23
    우선 감사 드립니다..

    근데여.. 이렇게 하니까.. 파일도 디렉토리와 같이 카운트 되는거 같네여..

    디렉토리만 세는 방법 부탁드립니다..







    강민주 wrote:

    > 권윤진 wrote:

    > > 디렉토리의 수를 카운트 하는 방법을 알고 싶습니다..

    > > 디렉토리의 수를 카운트 하는 함수는 없나여?..

    > > 고수님 플리즈..

    > > *^^*

    > >

    >

    > 안녕하세요 ^^

    > 디렉토리 수를 구하실려면.. findfirst, findnext로 구하심 될것 같군요.

    > 참고하세요.

    > var

    > sr: TSearchRec;

    > begin

    > FindFirst('c:*.*', faDirectory, sr);

    > while done = 0 do

    > begin

    > ListBox1.Items.Add(sr.name);

    > done := FindNext(sr);

    > end;

    > end;

    >

    > 그럼..20000.

  • Profile
    조규춘 2000.05.20 07:53
    권윤진 wrote:

    > 우선 감사 드립니다..

    > 근데여.. 이렇게 하니까.. 파일도 디렉토리와 같이 카운트 되는거 같네여..

    > 디렉토리만 세는 방법 부탁드립니다..

    >

    >

    >

    > 강민주 wrote:

    > > 권윤진 wrote:

    > > > 디렉토리의 수를 카운트 하는 방법을 알고 싶습니다..

    > > > 디렉토리의 수를 카운트 하는 함수는 없나여?..

    > > > 고수님 플리즈..

    > > > *^^*

    > > >

    > >

    > > 안녕하세요 ^^

    > > 디렉토리 수를 구하실려면.. findfirst, findnext로 구하심 될것 같군요.

    > > 참고하세요.

    > > var

    > > sr: TSearchRec;

    > > begin

    > > FindFirst('c:*.*', faDirectory, sr);

    > > while done = 0 do

    > > begin

    > > ListBox1.Items.Add(sr.name);

    > > done := FindNext(sr);

    > > end;

    > > end;

    > >

    > > 그럼..20000.





    예전에 한번 구현을 해본게 있어서.. 이렇게 보내니....

    한번 소스 분석을 해보시기 바랍니다.

    procedure Tfrmmain.SearchDirectory(dir: string);

    var

    Searchrec: TSearchrec;

    i : integer;

    st: string; // 경로를 저장할 문자열

    begin

    st := dir + '*.*';

    FindFirst(st, faanyfile, Searchrec);

    i := 0;

    while i = 0 do

    begin

    if (Searchrec.Name = '.') or (Searchrec.Name = '..') then

    begin

    i := FindNext(Searchrec); // 다음 디렉토리, 화일을 찾음...

    Continue;

    end; // if...



    if DirectoryExists(dir + '' + SearchRec.Name) then //찾은게 디렉토리면..

    begin

    st := dir + '' + Searchrec.Name;

    ListBox1.Items.Add('D-'+st );

    i := FindNext(Searchrec);

    Continue;

    end; // if....



    // 찾은게 파일일 경우.....

    st := dir + '' + Searchrec.Name;

    ListBox1.Items.Add('-f'+st);

    i := FindNext(Searchrec);

    end; //while...

    end;