::: 델파이 Tip&Trick :::

델파이 Tip&Trick 성격에 맞지 않는 광고,비방,질문의 글은 즉시 삭제하며
내용을 복사하여 사용할 경우 반드시 이곳(http://www.howto.pe.kr)을 출처로 명시하여 주세요


Category

  김영대(2003-03-07 21:54:22, Hit : 4843, Vote : 1192
 모든 드라이브,디렉토리 검색하여 파일 찾기

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls;

type
  TForm1 = class(TForm)
    ListBox1: TListBox;
    Button1: TButton;
    Button2: TButton;
    Edit1: TEdit;
    Label1: TLabel;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
    FScanAborted: Boolean;
  public
    { Public declarations }
    function ScanDrive(root, filemask: String; hitlist: TStrings): Boolean;
  end;

var
  Form1: TForm1;

implementation
{$R *.DFM}

function TForm1.ScanDrive(root, filemask: String; hitlist: TStrings): Boolean;
  function ScanDirectory(var path: String): Boolean;
  var
    SRec: TSearchRec;
    pathlen: Integer;
    res: Integer;
  begin
    Label1.caption := path;
    pathlen:= Length(path);

    res := FindFirst(path+filemask, faAnyfile, SRec);
    if res = 0 then
    try
      while res = 0 do
      begin
        hitlist.Add(path + SRec.Name);
        res := FindNext(SRec);
      end;
    finally
      FindClose(SRec)
    end;
    Application.ProcessMessages;
    Result := not (FScanAborted or Application.Terminated);
    if not Result then Exit;

    res := FindFirst(path+'*.*', faDirectory, SRec);
    if res = 0 then
    try
      while (res = 0) and Result do
      begin
        if ((Srec.Attr and faDirectory) = faDirectory) and
           (Srec.name <> '.') and
           (Srec.name <> '..') then
        begin
          path := path + SRec.name + '';
          Result := ScanDirectory(path);
          SetLength(path, pathlen);
        end;
        res := FindNext(SRec);
      end;
    finally
      FindClose(SRec)
    end;
  end;
begin
  FScanAborted := False;
  Screen.Cursor := crHourglass;
  try
    Result := ScanDirectory(root);
  finally
    Screen.Cursor := crDefault
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  ch: Char;
  root: String;
begin
  root := 'C:';
  for ch := 'A' to 'Z' do
  begin
    root[1] := ch;
    case GetDriveType(Pchar(root)) Of
      DRIVE_FIXED, DRIVE_REMOTE:
        if not ScanDrive(root, edit1.text, listbox1.items) then
          Break;
    end;
  end;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  fScanAborted := True;
end;

end.





291   [일반/컴포넌트] 하나의 프로시저,함수로 다른 함수,프로시저를 처리  김영대 2003/03/05 4076 1189
290   [윈도우즈 API] Application 에 발생하는 메시지 구경하기  김영대 2003/03/05 4707 1188
289   [시스템] 특정 DLL 의 함수목록을 구해보자.  구창민 2003/03/14 5665 1187
288   [시스템] CPU speed 구하기 2  김영대 2003/03/07 4203 1187
287   [일반/컴포넌트] TRichEdit 에 윗첨자, 아랫첨자 만들기  김영대 2003/03/07 4614 1186
286   [일반/컴포넌트] StringGrid의 모든 Cell 선택/해제하기  김영대 2004/09/25 4946 1185
285   [알고리즘] 두 문자열의 유사도 검사하기  김영대 2004/09/04 5295 1185
284   [윈도우즈 API] How to flush key buffer  김영대 2003/03/07 4495 1185
283   [일반/컴포넌트] 문자열의 끝에서부터 검색하는 Pos() 함수  김영대 2003/03/07 5180 1185
282   [시스템] Hint의 폰트 바꾸기  김영대 2003/03/05 4132 1185
281   [윈도우즈 API] 어플리케이션의 중복실행 방지  김영대 2003/03/05 4824 1185
280   [윈도우즈 API] bitmap 인쇄하기  김영대 2003/03/05 4592 1185
279   [일반/컴포넌트] 문자열의 word 갯수 세기  김영대 2003/03/04 4392 1185
278   [일반/컴포넌트] MS-OutLook 으로 메시지 보내기  김영대 2003/03/07 5210 1184
277   [윈도우즈 API] 바로 직전에 active 되었던 윈도우와 콘트롤 구하기  김영대 2004/07/24 4701 1181
276   [일반/컴포넌트] TStringGrid 인쇄하기  김영대 2003/03/07 4843 1181
275   [일반/컴포넌트] ListBox의 화면에 보여지는 최상위 Item 번호  김영대 2003/03/07 4386 1181
274   [일반/컴포넌트] Memo의 입력행수 제한하기  김영대 2003/03/07 4202 1181
273   [일반/컴포넌트] 쓰레드를 이용한 복수 Query 동시에 열기  김영대 2003/03/05 6520 1180
272   [COM/OLE] How to register an OCX  김영대 2003/03/06 5105 1179
271   [데이터베이스] 몇가지 BDE 환경정보 구하기  김영대 2003/03/07 4485 1178
270   [시스템] PC에 설치된 드라이브 목록 구하기  김영대 2003/03/07 4825 1178
269     [COM/OLE] [re] PDF ActiveX 사용하기  초보델피 2005/07/18 5397 1177
268   [일반/컴포넌트] 베쥬(Bezier) 곡선 그리기2  김영대 2003/03/07 6149 1175
267   [일반/컴포넌트] 부활절 달걀(easter egg) 문자열 입력받기  김영대 2003/03/07 4874 1175
266   [시스템] 프린터에 escape 코드를 전달하는 방법  김영대 2003/03/06 4004 1175
265   [알고리즘] 숫자를 KB, MB, GB 단위로 환산하기  김영대 2003/11/13 5131 1174
264   [일반/컴포넌트] ComboBox에 IE의 URL 입력창 같은 근접검색 두기  김영대 2003/03/31 4692 1173
263   [시스템] 일정시간 경과 후 윈도우즈 종료하기  김영대 2004/08/03 4764 1172
262   [일반/컴포넌트] 수직 스크롤이 맨마지막으로 이동했는지 검사  김영대 2003/03/07 3997 1171
261   [일반/컴포넌트] Memo의 커서를 특정 위치로 보낸후 scroll 시키기  김영대 2003/03/05 5144 1169
260   [윈도우즈 API] 데스크탑 아이콘 전부 감추기/보이기  김영대 2003/03/07 3974 1167
259   [일반/컴포넌트] Variant 변수의 Type 알아내기  김영대 2003/03/05 4454 1167
258   [일반/컴포넌트] 프로그램 종료시 도움말 화면 닫기  김영대 2003/03/05 4283 1166
257   [일반/컴포넌트] ListView 의 컬럼별로 Sort (내림차순 포함)  김영대 2003/03/05 5463 1165
256   [윈도우즈 API] "문서" 메뉴에 파일을 등록하고 삭제하기  김영대 2003/03/05 4386 1165
255   [시스템] Thread 사용하기  김영대 2003/03/07 4281 1164
254   [일반/컴포넌트] 표준 콘트롤의 몇가지 한계  김영대 2003/03/05 4378 1164
253   [윈도우즈 API] 윈도우즈의 시스템 폴더들의 실제 디렉토리  김영대 2003/03/05 4314 1163
252   [일반/컴포넌트] 표준 TListBox 에 Radio 버튼 올리기  김영대 2004/07/27 4260 1162

[이전 10개] [1]..[11][12][13][14][15][16][17] 18 [19][20]..[25] [다음 10개]
 

Copyright 1999-2023 Zeroboard / skin by zero