Q&A

  • FindFirst에 대해
안녕하세요

질문좀 여쭙죠...^^;



어떤 파일들을 프로그램상에서 지우려고 하는데

특정이름의 화일이 아니라서 와일드 카드를 써서 지우려고

합니다.

그래서 델파이 함수를 찾다가

FindFirst란 함수를 찾아서 검색을 할 수 있다는 것을 알았는데

검색한 결과값이 F : TSearchRec에 저장된다고 설명이 나와 있는데

DeleteFile을 쓰려면 String으로 화일을 넣어야 됩니다.

어떻게 하면 원하는 파일들을 찾아 한꺼번에 지울수 있을까요..

그럼 부탁드립니다.

1  COMMENTS
  • Profile
    김영대 1999.09.06 21:53
    아래 예제를 참고해 보세요

    파일 삭제루틴은 없습니다



    // 아래 예제의 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.