2013-05-07

[델파이] 파일처리(생성, 읽기, 쓰기, 크기/날짜/속성)


[Unit1.pas]

unit Unit1;
interface
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ComCtrls, Gauges;
type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    OpenDialog1: TOpenDialog;
    SaveDialog1: TSaveDialog;
    Button4: TButton;
    ProgressBar1: TProgressBar;
    Gauge1: TGauge;
    Animate1: TAnimate;
    Button3: TButton;
    Button5: TButton;
    Button6: TButton;
    procedure Button6Click(Sender: TObject);
    procedure Button5Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
var
  Form1: TForm1;
implementation
uses Unit2;
{$R *.dfm}
//------------------------------------------------------------------------------
// 파일생성
//------------------------------------------------------------------------------

procedure TForm1.Button1Click(Sender: TObject);
var
  F : TextFile;
  FH : Integer;
begin
  // AssignFile로 파일 생성  AssignFile(F, 'C:\DelphiSourceDataRoom\파일다루기\AssignFile.txt');
  Rewrite(F); // 쓰기모드로 오픈
  CloseFile(F); // 파일 닫음
  // FileCreate로 파일 생성
  FH := FileCreate('C:\DelphiSourceDataRoom\파일다루기\FileCreate.txt');
  FileClose(FH); // 파일닫음
end;
//------------------------------------------------------------------------------
// 파일 읽고 쓰고 복사하기
//------------------------------------------------------------------------------
procedure TForm1.Button2Click(Sender: TObject);
var
  FH1, FH2 : Integer; // 파일 핸들  Buffer : array[1..1024] of char; // 버퍼  iCount : Integer; // 파일크기  iFileSize : Integer; // 파일크기
begin
  if OpenDialog1.Execute then begin // 열기 대화상자 실행    // fmShareDenyWrite : 다른파일을 사용하고있어도 읽어올수있도록 허용    FH1 := FileOpen(OpenDialog1.FileName, fmShareDenyWrite); // 파일 오픈    iFileSize := FileSeek(FH1, 0, 2); // 파일 사이즈 측정(주의. 파일끝으로 포인터이동)    FileSeek(FH1, 0, 0); // (파일 포인터를 맨앞으로 다시이동)
    if FH1 <> -1 then begin // FH1 파일 핸들값이 존재한다면
      if SaveDialog1.Execute then begin // 저장 대화상자 실행        FH2 := FileCreate(SaveDialog1.FileName); // 저장명으로 파일생성
          if FH2 <> -1 then begin // 생성한 FH2 파일행들값이 존재한다면
            // 파일을 1024만큼 읽어드리고 그 크기를 반환한다.
            iCount := FileRead(FH1, Buffer, sizeof(Buffer));
            // 프로그레스바 초기화
            ProgressBar1.Min := 0;
            ProgressBar1.Max := iFileSize;
            ProgressBar1.Position := 0;
            // 게이지 초기화            Gauge1.MinValue := 0;
            Gauge1.MaxValue := iFileSize;
            Gauge1.Progress := 0;
            // 에니메이터 초기화
            Animate1.CommonAVI := aviCopyFiles;
            while iCount <> 0 do begin // 파일에 내용이 있을때까지 반복해서 읽는다.
              ProgressBar1.Position := ProgressBar1.Position + sizeof(Buffer); // 진행상태 프레그레스바에 표시              Gauge1.Progress := Gauge1.Progress + sizeof(Buffer); // 진행상태 게이지에 표시
              FileWrite(FH2, Buffer, iCount); // FH1의 내용을 FH2에 쓴다              iCount := FileRead(FH1, Buffer, sizeof(Buffer)); // FH1 뒤에 이어서 읽어들인다.            end;
            // 에니메이터 동작 중지            Animate1.Active := False;
            Animate1.Visible := False;
            ShowMessage('파일 복사작업이 완료되었습니다.');
          End
          else begin
            ShowMessage('파일을 생성하던중 에러가 났습니다.');
            FileClose(FH1); // FH1 파일을 닫는다.          End;
      End;
      FileClose(FH2); // FH2 파일을 닫는다.    End
    else ShowMessage('파일 오픈시 에러가 발생하였습니다.');
    FileClose(FH1); // FH1를 닫는다.  End;
End;
//------------------------------------------------------------------------------
// 파일 크기 알아보기
//------------------------------------------------------------------------------

procedure TForm1.Button4Click(Sender: TObject);
var
  FH3 : Integer;
  iFileSize : Integer;
begin
  FH3 := FileOpen('C:\DelphiSourceDataRoom\파일다루기\AssignFile.txt', fmShareDenyWrite);
  // FileSeek Origin(Handle, Offset, Origin)
  // 0 : 파일 포인터가 파일의 처음에서 Offset의 바이트수에 해당하는 위치로 포인터를 이동.
  // 1 : 파일 포인터가 현재의 위치에서 Offset의 바이트수에 해당되는 위치로 포인터를 이동.
  // 2 : 파일 포인터가 파일의 끝에서 Offset의 바이트수에 해당되는 위치로 포인터를 이동
  iFileSize := FileSeek(FH3, 0, 2); // 파일 사이즈  ShowMessage('AssignFile.txt : ' + IntToStr(iFileSize));
  FileClose(FH3); // 파일 닫기end;
// 파일의 생성 날짜 조회
procedure TForm1.Button3Click(Sender: TObject);
var
  dtDate : TDateTime; // 파일 생성날짜  FH4 : Integer; // 파일핸들
begin
  if OpenDialog1.Execute then begin // 열기 대화상자 실행    // fmShareDenyWrite : 다른파일을 사용하고있어도 읽어올수있도록 허용
    FH4 := FileOpen(OpenDialog1.FileName, fmShareDenyWrite); // 파일 오픈    dtDate := FileDateToDateTime(FileGetDate(FH4)); // 파일의 날짜 조회    ShowMessage(DateTimeToStr(dtDate));
    FileClose(FH4); // 파일 닫음  end;
end;
//------------------------------------------------------------------------------
// 디렉토리내에서 파일찾기
//------------------------------------------------------------------------------

procedure TForm1.Button5Click(Sender: TObject);
var
  Form2 : TForm2;
begin
  Form2 := TForm2.Create(Application);
  Form2.Show;
end;
//------------------------------------------------------------------------------
// 파일의 속성값 얻어오고 변경하기
//------------------------------------------------------------------------------

procedure TForm1.Button6Click(Sender: TObject);
var
  FH5 : Integer;
  FileSetDataResult: Integer;
  FileDate: Integer;
begin
  if OpenDialog1.Execute then begin // 열기 대화상자 실행
    // 파일을 읽기속성 or 쓰기 속성으로 바꿈    FileSetAttr(OpenDialog1.FileName, fmShareDenyNone);
    FH5 := FileOpen(OpenDialog1.FileName, fmOpenReadWrite); // 파일 오픈
    try
      // 파일날짜 변경
      FileDate := DateTimeToFileDate(StrToDateTime('2001-05-21 01:01:01'));
      FileSetDataResult := FileSetDate(FH5, FileDate);
      if FileSetDataResult <> 0 then
      begin
        ShowMessage('파일날짜 변경 실패 : '+IntToStr(FileSetDataResult));
      end;
    finally
      FileClose(FH5); // 파일 닫음    end;
    // FileSetAttr(OpenDialog1.FileName, faReadOnly); // 파일을 읽기속성으로 바꿈  End;
end;
end.

댓글 없음: