Delphi 파일 처리(2)

10907 단어 Delphi파일 처리
1. 파일 관리 클래스 함수
파일에 FileExists가 있는지 여부 폴더에 DirectoryExists가 있는지 판단
파일 DeleteFile 삭제하기;Windows.DeleteFile 폴더 RemoveDir 삭제;RemoveDirectory
현재 폴더 GetCurrentDir 현재 폴더 SetCurrentDir 설정 가져오기ChDir; SetCurrentDirectory
지정한 드라이브의 현재 경로 이름 가져오기GetDir 파일 이름 바꾸기 RenameFile
폴더 CreateDir 만들기;CreateDirectory; ForceDirectories에서 빈 폴더 RemoveDir를 삭제합니다.RemoveDirectory
현재 파일의 버전 번호 GetFileVersion을 가져옵니다. 디스크 공간 DiskSize를 가져옵니다.DiskFree
파일 찾기 FileSearch 검색 파일 FindFirstFindNext; FindClose
파일 속성 FileGetAttr 읽기 및 설정하기FileSetAttr에서 파일을 만든 날짜 FileAge를 가져옵니다.FileDateToDateTime
 
1.1 API 파일 처리 함수
1. GetWindowsDirectory - Windows 디렉토리 가져오기
//선언: GetWindowsDirectory(
                  lpBuffer: PChar;{버퍼}
uSize: UINT {버퍼 크기}): UINT;{실제 길이로 돌아가기}
num := GetWindowsDirectory(arr, MAX_PATH);
2. GetSystemDirectory - System 폴더 경로로 돌아가기
//선언: GetSystemDirectory(lpBuffer: PChar, {버퍼}uSize: UINT {버퍼 크기}): UINT;{실제 길이로 돌아가기}
num := GetSystemDirectory(arr, MAX_PATH);  
3. GetTempPath - 임시 폴더 경로 가져오기
//선언: GetTempPath(nBufferLength: DWORD, {버퍼 크기}lpBuffer: PChar {버퍼}): DWORD;{실제 길이로 반환} num: = GetTempPath(MAX PATH,arr)
 
4.GetTempFileName - 임시 파일 이름 생성
 
5. CopyFile - 파일 복사
//선언: CopyFile(lpExistingFileName: PChar, {소스 파일}lpNewFileName: PChar, {대상 파일}bFailIfExists: BOOOL {대상 파일이 존재하면 True: 실패, False: 덮어쓰기}): BOOL;
6.CreateDirectory - 폴더 설정
CreateDirectory(PChar(dir), nil);
 
7.CreateDirectoryEx - 템플릿에 따라 폴더 만들기
CreateDirectoryEx(PChar(TDir), PChar(Dir),nil);
 
8.RemoveDirectory - 빈 디렉토리//선언: RemoveDirectory(lpPathName: PAnsiChar {디렉토리 이름}): BOOL;
if RemoveDirectory(PChar(Dir))then 
 
9.SetCurrentDirectory, GetCurrentDirectory - 현재 디렉토리 설정 및 가져오기
SetCurrentDirectory('c:\temp'); 
GetCurrentDirectory(SizeOf(buf), buf);
 
10. SetVolumeLabel - 디스크 볼륨 레이블 설정
SetVolumeLabel('c:\', 'NewLabel');
 
 
2. INI 파일 읽기
private
    List: TStrings;
    Fini: TIniFile;
    Path: string;
    Section,Key: string;
    { Private declarations }
  public
    { Public declarations }
  end;

var
  MainForm: TMainForm;

implementation
uses
  ShellAPI;

{$R *.dfm}

{
  INI File ===============================================================
}
procedure TMainForm.FormCreate(Sender: TObject);
begin
  Path := ChangeFileExt(ParamStr(0),'.ini');
  Fini := TIniFile.Create(Path);
end;

//   Write  INI
procedure TMainForm.Button1Click(Sender: TObject);
begin
  Section := 'Delphi xe Title';
  Key := 'Astring Key';
  Fini.WriteString(Section,Key,'a_string value');
  ShellExecute(0,'open',PAnsiChar(Path),nil,nil,sw_show);
end;

//   Read INI
procedure TMainForm.Button2Click(Sender: TObject);
var
  s: string;
begin
  s := Fini.ReadString('Delphi xe Title','Astring Key','');
  ShowMessage(s);
end;

//     Read ReadSections ....Section
procedure TMainForm.Button3Click(Sender: TObject);
begin
  List := TStringList.Create;
  Fini.ReadSections(List);
  ShowMessage(List.Text);    //Delphi xe Title
end;

//      Read  ReadSection  ...Key
procedure TMainForm.Button4Click(Sender: TObject);
begin
  List := TStringList.Create;
  Fini.ReadSection('Delphi xe Title',List);
  ShowMessage(List.Text);  //AString Key
end;

//    DeleteKey 

procedure TMainForm.Button5Click(Sender: TObject);
begin
  Fini.DeleteKey('Delphi xe Title','AString Key');
end;

//      EraseSection
procedure TMainForm.Button6Click(Sender: TObject);
begin
  Fini.EraseSection('Delphi xe Title');
end;

//Other...
procedure TMainForm.Button7Click(Sender: TObject);
var
  b: Boolean;
  s: string;
begin
  b := Fini.SectionExists('Delphi xe Title');         {     }
  ShowMessage(BoolToStr(b));
  b := Fini.ValueExists('Delphi xe Title','AString Key'); {  }
  ShowMessage(BoolToStr(b));
  s := Fini.FileName;                     {   }
  ShowMessage(s);
end;


 
3. 텍스트 파일 읽기와 쓰기
Delphi는 세 가지 파일 형식을 지원합니다: 텍스트 파일, 기록 파일, 무형식 파일.텍스트 파일은 비헤이비어 단위로 읽기, 쓰기됩니다.각 줄의 길이가 반드시 같지 않기 때문에 주어진 줄이 파일의 정확한 위치를 계산할 수 없기 때문에 순서대로 읽기와 쓰기만 할 수 있다.텍스트 파일은 읽기나 쓰기만 할 수 있으며, 열린 텍스트 파일에서 읽기와 쓰기를 동시에 할 수 없습니다.텍스트 파일을 열려면 다음 두 단계가 필요합니다. 1.파일 변수는 파일 이름과 연결됩니다.2. 읽기와 쓰기를 초기화합니다.1. 파일 변수가 파일 이름과 연관됨: AssignFile(VarTxt, FileName);FileName 경로를 생략하면 현재 디렉토리가 기본값으로 설정됩니다.2. 읽기와 쓰기를 초기화하는 데는 세 가지 방법이 있다. (1) Reset: 읽기만 하고 열면 바늘을 파일 헤더로 옮긴다.(2) Rewrite: 새 파일을 만들고 열고 쓰기만 합니다.(3) Append: 끝에서 추가되며 포인터는 당연히 파일 끝에 있습니다.파일이 존재하지 않을 때 Reset 또는 Append를 사용하면 입출력 예외가 발생합니다.마지막으로 CloseFile을 사용하여 파일을 닫습니다.
 var
    F: Text;
    FileName: string = 'D:\Delphi Study N\15.Delphi File\a.txt';

{
  Text File ================================================
}

//   Write Txt
procedure TMainForm.Button8Click(Sender: TObject);
begin
  AssignFile(F,FileName);
  Rewrite(F);  //     

  writeln(F,'One');
  Writeln(F,'Two');

  CloseFile(F);
  
  ShellExecute(0,'Open',PAnsiChar(FileName),nil,nil,SW_SHOW);
end;

//   Read Txt
procedure TMainForm.Button9Click(Sender: TObject);
var
  s: string;
begin
  AssignFile(F,FileName);
  Reset(F);

  Readln(F,s);
  ShowMessage(s);

  CloseFile(F);
end;

//   Add Txt
procedure TMainForm.Button10Click(Sender: TObject);
begin
  AssignFile(F,FileName);
  Append(F);

  Writeln(F,'Three');
  Writeln(F,'Four');

  CloseFile(F);
  ShellExecute(0,'Open',PAnsiChar(FileName),nil,nil,SW_SHOW);
end;

//Read All Txt
procedure TMainForm.Button11Click(Sender: TObject);
var
  s: string;
begin
  AssignFile(F,FileName);
  Reset(F);

  while not Eof(F) do
  begin
    Readln(F,s);
    Memo1.Lines.Add(s);
  end;
  CloseFile(F);
end;

//Write and Read Not same type           
procedure TMainForm.Button12Click(Sender: TObject);
var
  name: string[6];
  age: Word;
  birthday: TDate;
begin
  AssignFile(F,FileName);
  Rewrite(F);

  name := 'lailai ';  //????6? 
  age := 25;
  birthday := StrToDate(DateToStr(Now-25*365));  // さぱ?ネら
  Writeln(F,name,age,birthday);

  CloseFile(F);
  Reset(F);

  Readln(F,name,age,birthday);
  Memo1.Clear;
  Memo1.Lines.Add(name);
  Memo1.Lines.Add(IntToStr(age));
  Memo1.Lines.Add(DateToStr(birthday));

  CloseFile(F);
end;

 

 
4. 구조화된 파일 액세스
AssignFile: Rewrite 연결: 새 파일을 만들고 엽니다. 존재하는 경우 Reset: 존재하는 파일을 덮어씁니다.추가도 그것으로 먼저 열고 바늘을 움직여야 한다.Append는 텍스트 파일 전용의 CloseFile: FileSize 닫기: 기록수 FilePos: 파일의 현재 위치를 되돌려줍니다 Seek: 파일 포인터를 지정한 위치로 이동합니다 (구조화된 파일에만 사용) Eof: 파일 끝 Read: 읽기 Write: 쓰기: 긴 문자열, 변수, 클래스 실례, 인터페이스 또는 동적 그룹을 포함하는 기록은 형식 파일에 쓸 수 없습니다!
 
type
  TPersonrec = packed record
    name: string[12];
    age: Word;
    birthday: TDate;
  end; //       

  var
    DataFile: file of TPersonRec;  //   DataFile      TPersonRec      

    PersonRec: TPersonRec;  //         

     FeName: string = 'D:\Delphi Study N\15.Delphi File\b.dat';  //   

//write .dat
procedure TMainForm.Button13Click(Sender: TObject);
begin
  AssignFile(DataFile,FeName);
  Rewrite(DataFile);  //    ,        

  PersonRec.name := 'lailai';
  PersonRec.age := 25;
  PersonRec.birthday := StrToDate('1988/11/16');

  write(datafile,personrec);

  CloseFile(DataFile);

  ShellExecute(0,'Open',PAnsiChar(FeName),nil,nil,SW_SHOW);
end;

//Add dat
procedure TMainForm.Button14Click(Sender: TObject);
begin
  AssignFile(DataFile,FeName);
  Reset(DataFile);  //Append       

  Seek(DataFile,FileSize(DataFile)); //     ,     FileSize         

  PersonRec.name := 'ailaio';
  PersonRec.age := 7;
  PersonRec.birthday := StrToDate('2006/12/19');
  Write(DataFile,PersonRec);

  CloseFile(DataFile);
end;

//   Alter dat
procedure TMainForm.Button15Click(Sender: TObject);
begin
  AssignFile(DataFile,FeName);
  Reset(DataFile);

  Seek(DataFile,1); //     2 
  read(datafile,personrec);
  PersonRec.age := 0;
  PersonRec.birthday := StrToDate('2013/1/2');

  Seek(DataFile,3);
  write(datafile,personrec);
  
  CloseFile(DataFile);
end;


 

5. WinAPI: WritePrivateProfileString, GetPrivateProfileString - 간단한 읽기 및 쓰기 Ini 파일
WritePrivateProfileString('세그먼트1','Key1','값1', PChar(FilePath));
GetPrivateProfileString('세그먼트 1','Key2','기본값', buf, Length(buf), PChar(FilePath)),
 
6. 복잡한 구조적 액세스
어떤 문서들은 구조화된 것이 아니다. 예를 들어 수첩 문서와 같다.구조화된 문서는 표준 구조화 문서, 사용자 정의 구조화 문서(예를 들어 bmp 파일)와 복합 문서로 나눌 수 있다.여기서 말하고자 하는 구조화 저장(복합 문서)은 윈도 시스템이COM을 통해 제공하는 것으로 윈도 디렉터리 구조처럼 복잡한 파일 구조의 접근을 완성할 수 있다.Windows의 디렉터리 구조를 알려 줍니다: 한 디렉터리에 하위 디렉터리와 파일을 포함할 수 있으며, 겹겹이 끼워 넣을 수 있습니다.때때로 우리가 저장해야 할 파일도 층층이 갈라질 수 있고 구체적인 파일 내용도 다양할 수 있다. 예를 들어 갈라진 부분의 어떤 파일은 사진이고 문자열 목록이며 기록(또는 구조라고 부른다) 등이다. 이런 파일 내용을 저장하는 것은 데이터베이스로 하는 것도 무능할 것이다.이런 복합 파일은 다중 루틴을 지원하는데, 서로 다른 프로세스의 다른 루틴은 복합 파일의 다른 부분에 동시에 접근할 수 있다.복합 파일의 가장 전형적인 실례는 OLE이다(예를 들어 Word에 전자 표를 삽입할 수 있다).이것도 아마도 이런 복합 파일의 유래일 것이다.어쩌면 이 물건이 생기면 자신만의 파일 형식을 만드는 것이 쉬운 일이 될지도 모른다.복합 문서에 대한 접근과 접근은 주로 Activex 단원에 정의된 세 개의 COM 인터페이스를 사용합니다: IStorage(Windows와 유사한 디렉터리, 즉 폴더).IStream (디렉터리에 있는 파일과 유사하지만, 여기는 모두 '흐름' 이며, 모든 흐름은 적어도 512바이트를 차지한다.)IEnumStatStg(Istorage의 차원 구조를 열거하는 데 사용) 인터페이스는 또 하나의 복잡한 개념이므로 당분간 그것을 함수의 집합으로 간주합시다.7. 파일 복사
procedure TForm1.Button1Click(Sender: TObject);
const 
   SourceDir = 'C:\Temp\Folder1';{소스 폴더가 있어야 합니다.]
   DestDir = 'C:\Temp\Folder2';{대상 폴더가 존재하지 않으면 프로그램이 자동으로 생성합니다}
begin 
  TDirectory.Copy(SourceDir, DestDir);
end;
 
 

좋은 웹페이지 즐겨찾기