[delphi] 간단한 파일탐색기 프로그램

in #delphi8 years ago

Delphi7 툴로 만든 간단한 파일탐색기 프로그램입니다.
기능으로는 ShellTreeView 컴포넌트를 이용한 폴더 탐색을 통해 txt, jpg, bmp 파일만 ListBox에 출력하여 ListBox에 있는 파일을 클릭할 경우에 text나 image 파일을 불러오도록 했습니다. 추가로 text파일의 경우 파일을 수정하면 같은 이름으로 같은 폴더에 다시 저장하거나 다른이름으로 저장할 수 있도록 구현했습니다. 그리고 이미지 같은 경우는 다른 이름으로 저장할 수 있도록 했습니다.

*파일을 불러오거나 다른 이름으로 저장할 때 사용한 객체로는 TSearchRec, TSaveDialog가 있습니다.

파일탐색기 테스트이미지입니다.

다음은 프로그램 내부 소스 코드입니다.
unit explorer;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, StdCtrls, ComCtrls, ShellCtrls, Jpeg;
type
TForm1 = class(TForm)
FileExplorer: TShellTreeView;//탐색기 폴더
FileList_Box: TListBox;//텍스트 및 이미지 파일 리스트
FileImg: TImage;// 파일이미지
TextMemo: TMemo;// 파일 텍스트
FileRoute: TEdit;// 파일 루트
Lbl1: TLabel;//기본 라벨1
Lbl2: TLabel;// 기본 라벨2
SaveBtn: TButton;//저장 버튼
NewSaveBtn: TButton;//새로저장 버튼
procedure ShellTreeViewChange(Sender: TObject; Node: TTreeNode);
procedure FileListClick(Sender: TObject);
procedure SaveBtnClick(Sender: TObject);
procedure NewSaveBtnClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
procedure GetFileList(Folder: string);//모든 파일리스트를 얻는 프로시져
procedure AddFile(FileName:string);//텍스트와 이미지 파일만을 리스트에 추가
procedure LoadFromFile(FileName: string);//텍스트 및 이미지 파일 불러오기
procedure SaveToFile(FileName: string);//텍스트 및 이미지 파일 저장하기
end;
var
Form1: TForm1;
searchResult: TSearchRec;//파일을 찾는 데 쓰임
Found: integer;//파일을 찾는 데 쓰이는 정수 변수
tempFile: array[0..100] of string;//파일 임시저장 배열
i: integer=1;// for문에 필요한 정수 변수
saveDialog: TSaveDialog;//파일 저장을 위한 비쥬얼 컴포넌트
implementation
//initialization
{$R .dfm}
procedure TForm1.GetFileList(Folder: string);//탐색기 폴더에 있는 파일리스트 가지고 오기
begin
Found:=FindFirst(Folder+'*.
', faDirectory, searchResult);//현재디렉토리에서 *.와 매칭하는 파일을 찾습니다.
while Found = 0 do//FindFirst함수는 매칭하는 파일을 찾으면 0 값을 리턴합니다. 매칭하는 파일을 찾으면 계속 반복합니다.
begin
if((searchResult.Attr and faDirectory) <> faDirectory) then//파일 어트리뷰트와 디렉토리파일이 디렉토리파일이 아니라면?
begin
AddFile(Folder+''+searchResult.Name);//\가 포함된 파일을 리스트박스에 추가합니다.
FileRoute.Text:=ExtractFilePath(Folder+''+searchResult.Name);// \가 포함된 파일명
end; //출력되도록 합니다.
Found:=FindNext(searchResult);//다음 매칭 파일을 찾습니다.
end;
FindClose(searchResult);//모든 매칭 파일을 찾으면 실행합니다.
end;
procedure TForm1.AddFile(FileName: string);//
begin
//확장자명이 bmp, jpg, txt가 아니면 리스트에 파일 추가 안 함
if (LowerCase(ExtractFileExt(FileName)) <> '.bmp') and
(LowerCase(ExtractFileExt(FileName)) <> '.jpg') and
(LowerCase(ExtractFileExt(FileName)) <> '.txt')
then exit;
//확장자명이 맞으면 리스트에 파일 추가함
FileList_Box.Items.Add(ExtractFileName(FileName));
//파일 path를 tempFile 배열에 임시 저장함
tempFile[i]:=FileName;
i:=i+1;
end;
procedure TForm1.LoadFromFile(FileName: string);
begin
//확장자명이 bmp, jpg이면 이미지 파일을 출력함
if (LowerCase(ExtractFileExt(FileName)) <> '.bmp') and
(LowerCase(ExtractFileExt(FileName)) <> '.jpg') then begin
TextMemo.Lines.LoadFromFile(FileName);
end
else
begin
//확장자명이 txt이면 이미지 파일을 출력함
FileImg.Visible:=True;
FileImg.Picture.LoadFromFile(FileName);
end;
end;
procedure TForm1.SaveToFile(FileName: string);
begin
//확장자명이 bmp, jpg이면 이미지 파일을 저장함
if (LowerCase(ExtractFileExt(FileName)) <> '.bmp') and
(LowerCase(ExtractFileExt(FileName)) <> '.jpg') then begin
TextMemo.Lines.SaveToFile(FileName);
end
else
begin
//확장자명이 txt이면 이미지 파일을 저장함
FileImg.Picture.SaveToFile(FileName);
end;
end;
procedure TForm1.ShellTreeViewChange(Sender: TObject; Node: TTreeNode);
begin
if Node = Nil then exit; //Node의 포인터 주소값이 0이면 실행 안 함
FileList_Box.Clear;//다른 폴더를 클릭하면 리스트파일 클리어
GetFileList(FileExplorer.Path);////탐색기 폴더에서 파일리스트 불러오기
i:=1;//배열을 초기화하기 위해 i값 초기화
end;
procedure TForm1.FileListClick(Sender: TObject);
var
j:integer;
begin
TextMemo.Clear;
FileImg.Visible := False;
begin
//파일리스트에서 내가 클릭한 파일명이 매칭될 경우 파일을 불러옴
for j:=1 to FileList_Box.Items.Count do
if (FileList_Box.Selected[j-1]=true) then
begin
LoadFromFile(tempFile[j]);
end;
end;
end;
procedure TForm1.SaveBtnClick(Sender: TObject);
var
k:integer;
begin
begin
//파일리스트에서 내가 클릭한 파일명이 매칭될 경우 파일을 저장함
for k:=1 to FileList_Box.Items.Count do
if (FileList_Box.Selected[k-1]=true) then
begin
SaveToFile(tempFile[k]);
ShowMessage('파일 저장 완료!!');
end;
end;
end;
procedure TForm1.NewSaveBtnClick(Sender: TObject);
var
k:integer;
begin
begin
//파일리스트에서 내가 클릭한 파일명이 매칭될 경우 파일을 저장함
for k:=1 to FileList_Box.Items.Count do
if (FileList_Box.Selected[k-1]=true) then begin
saveDialog:= TSaveDialog.Create(self);// save dialog 객체 생성
saveDialog.Title:='텍스트나 이미지를 저장하세요.';//dialog 타이틀
saveDialog.InitialDir:=ExtractFilePath(tempFile[k]);//시작하는 디렉토리 셋업
saveDialog.Filter:='.txt|
.txt|.jpeg|.jpg|.bmp|.bmp';//확장자 필터링
if (LowerCase(ExtractFileExt(tempFile[k]))='.txt') then
begin
saveDialog.DefaultExt := 'txt';//txt 디폴트 확장자
saveDialog.FilterIndex := 1;//필터 인덱스1은 txt
end
else if (LowerCase(ExtractFileExt(tempFile[k]))='.jpg') then
begin
saveDialog.DefaultExt := 'jpg';//txt 디폴트 확장자
saveDialog.FilterIndex := 2;//필터 인덱스2은 jpg
end
else if (LowerCase(ExtractFileExt(tempFile[k]))='.bmp') then
begin
saveDialog.DefaultExt := 'bmp';//txt 디폴트 확장자
saveDialog.FilterIndex := 3;//필터 인덱스3은 bmp
end;
if saveDialog.Execute then//다이어로그가 열리면?
begin
SaveToFile(saveDialog.FileName);//파일 저장
ShowMessage(saveDialog.FileName + #13#10 +'에 저장을 완료하였습니다.');
FileList_Box.Clear;//리스트 박스 클리어
GetFileList(FileExplorer.Path);//다시 리스트박스 불러오기
end
else
begin
ShowMessage('저장이 취소되었습니다.');
end;
saveDialog.Free;
end;
end;
end;
end.

  • 코드 수정할 사항이나 질문할 거 있으시면 댓글로 남겨주시면 감사하겠습니다.