1. 程式人生 > >Delphi7檔案操作常用函式一

Delphi7檔案操作常用函式一

1. AssignFile、Erase

AssignFile

procedure AssignFile(var F; FileName: string);:給檔案變數連線一個外部檔名。這裡需要注意的是AssignFile不能用在已開啟的檔案上。

procedure TForm1.Button1Click(Sender: TObject);
var
    text : String;
    F1 : TextFile;
begin
   Try
      AssignFile(F1,Trim(Edit1.Text));  //變數與外部檔名關聯
      Append(F1);    
      text := Memo1.Text;
      write(f1,text);
      CloseFile(f1);                   //終止變數與外部檔案的關聯
   Except
      ShowMessage('寫入失敗');
   End;
end;

 Erase

procedure Erase(var F);:刪除一個外部檔案。

AssignFile(MyFile,'d:\dd.txt');
Erase(MyFile);  //必須關閉一個檔案後才可以刪除它

2.ChDir

procedure ChDir(const S: string); overload;

procedure ChDir(P: PChar); overload;

將當前目錄修改為指定目錄。其中S、P表示指定修改的目錄。

3.CloseFile

procedure CloseFile(var F);:終止一個檔案變數與一個外部磁碟檔案的關聯。其中,F表示指定關閉的檔案變數。

4. CreateDir

function CreateDir(const Dir: string): Boolean;:建立一個新的目錄。如果返回值為true,則表示目錄建立成功;否則返回失敗。

procedure TForm1.Button1Click(Sender: TObject);
begin
  if not DirectoryExists('c:\temp') then  //判斷目錄是否存在
    if not CreateDir('C:\temp') then      //判斷目錄是否可以新建立
    raise Exception.Create('Cannot create c:\temp');
end;


5. DeleteFile、FileClose、FileCreate、FileExists、FileGetAttr、FileOpen、FileSearch

DeleteFile

function DeleteFile(const FileName: string): Boolean;:從磁碟中刪除一個指定的檔案。如果返回true,則表示檔案刪除成功;否則刪除失敗。

FileClose

procedure FileClose(Handle: Integer);:用來關閉一個指定的檔案。

FileCreate

function FileCreate(const FileName: string): Integer; overload;

function FileCreate(const FileName: string; Rights: Integer): Integer; overload;

用於建立一個檔案。其中第二個函式中的Rights用於設定檔案許可,主要用於Linux系統。如果返回值為-1,則表示檔案建立失敗;否則表示檔案建立成功。該返回值作為FileClose的引數。

FileExists

function FileExists(const FileName: string): Boolean;:測試指定的檔案是否存在。如果存在,則返回true;否則返回false。

FileGetAttr

function FileGetAttr(const FileName: string): Integer;:返回檔案的屬性。如果返回值為1,則檔案是隻讀的(faReadOnly);如果為2,則檔案是隱藏檔案(faHidden);

FileOpen

function FileOpen(const FileName: string; Mode: LongWord): Integer;:用指定的訪問方式開啟一個指定的檔案。其中Mode為檔案訪問方式(只讀(mOpenRead)、只寫(fmOpenWrite)、讀寫(fmOpenReadWrite))。如執行成功,則返回值大於等於0;否則返回值為-1。

procedure OpenForShare(const FileName: String);

var
  FileHandle : Integer;
begin
  FileHandle := FileOpen(FileName, fmOpenWrite or fmShareDenyNone);
  if FileHandle > 0 then
    {valid file handle}
  else
    {Open error: FileHandle = negative DOS error code}
end;

FileSearch

function FileSearch(const Name, DirList: string): string;:在指定路徑中搜索指定的檔案。其中DirList用於輸入檔案所在路徑,如有多個路徑,中間需要用;。如未找到檔案,則返回空值;否則返回的是檔名稱。

procedure TForm1.btn_SearchFileClick(Sender: TObject);
var
  FileToFind : string;
begin
  FileToFind := FileSearch(edit_FileName.Text,GetCurrentDir);
  if FileToFind = '' then
    ShowMessage('不能找到檔案')
  else
    ShowMessage('找到檔案:'+FileToFind);
end; 

6. DirectoryExists

function DirectoryExists(const Directory: string): Boolean;:判斷指定的目錄是否存在。如果目錄存在,則返回true;否則返回false。其中Directory如果是絕對路徑,則在該絕對路徑下查詢,否則則在當前專案路徑下查詢。

7.FileRead、FileSeek、FileWrite

FileRead

function FileRead(Handle: Integer; var Buffer; Count: Integer): Integer;:從指定檔案(當前檔案指標)中讀取相應位元組的資料,同時調整檔案指標位置。其中,buffer用於儲存從檔案中讀取的資料;count表示讀取的位元組數。返回實際讀取的位元組數。

FileSeek

function FileSeek(Handle, Offset, Origin: Integer): Integer; overload;
function FileSeek(Handle: Integer; const Offset: Int64; Origin: Integer): Int64; overload;

能夠重新定位檔案讀寫指標。其中Origin表示源點(0表示指標在檔案的開始;1表示指標在當前檔案的位置;2表示指標在檔案的末尾);handle為FileOpen或FileCreate返回的值;Offset表示位移量。如果FileSeek執行成功,則返回新的檔案指標;否則返回-1。

procedure TForm1.btn_ReadClick(Sender: TObject);
var
  fend : integer;
  fOpen : THandle;
  buffer : PChar;
  count : integer;
  i: integer;
begin
  {檔案讀取分為:1.已指定方式開啟檔案;2.利用fileSeek獲取字元長度;3.重新定位檔案指標,使其從頭開始;
  4.為buffer分配記憶體空間;5.讀取檔案記憶體,返回長度;6.關閉檔案;}
  fOpen := FileOpen('F:\test.txt',fmOpenReadWrite);   //以讀寫的方式開啟檔案test.txt
  if fOpen<> -1 then
  begin
  fend := FileSeek(fOpen,0,2);   //將檔案指標移動到末尾,為了方便建立陣列
  FileSeek(fOpen,0,0);       //將檔案指標重新指定到檔案開頭,為讀寫檔案作準備
  buffer := PChar(AllocMem(fend+1));     //為buffer分配記憶體空間
  count := FileRead(fOpen,buffer^,fend);  //讀取檔案內容,返回字元數
  FileClose(fOpen);        //關閉檔案
  for i:=0 to count-1 do    //遍歷記憶體,取出內容
  begin
    ShowMessage(buffer[i]);
  end;
  end
  else
    ShowMessage('檔案不存在!');
end;

FileWirte

function FileWrite(Handle: Integer; const Buffer; Count: Integer): Integer;:將快取區中的內容寫入到檔案中。其中buffer用於寫入檔案的資料;count指定寫入資料的長度。

{寫入檔案}
procedure TForm1.btn_WriteClick(Sender: TObject);
var
  fOpen : THandle;
  result : integer;
  buffer : PChar;
begin
  fOpen := FileOpen('F:/test.txt',fmOpenReadWrite);
  if fOpen <> -1 then
  begin
  FileSeek(fOpen,0,2);
  buffer := PChar(edit_FileName.Text);  //將編輯框中的內容放到buffer緩衝區中
  result := FileWrite(fOpen,buffer^,StrLen(buffer));
  if result <> -1 then
    ShowMessage('寫入成功!')
  else
    ShowMessage('寫入失敗');
  end
  else
    ShowMessage('未找到檔案');
  FileClose(fOpen);
end;


8.FindClose、FindFirst、FindNext

FindClose

procedure FindClose(var F: TSearchRec);:終止一個查詢過程,並釋放查詢檔案所分配的空間。其中F為TSearchRec型別的結構,記錄檔案搜尋時的一些資訊。而FindClose中的引數值來源於FindFirst或FindNext函式。

FindFirst

function FindFirst(const Path: string; Attr: Integer; var F: TSearchRec): Integer;:在指定目錄中搜索第一個指定屬性的檔案。其中Attr(faReadOnly、faHidden、faSysFile、faVolumeID、faDirectory(23)、faArchive、faAnyFile)

FindNext

function FindNext(var F: TSearchRec): Integer;:繼續查詢指定的檔案。其中F為FindFirst查詢檔案或得到的資訊。如結果返回為0,則說明函式執行成功;否則執行失敗。

{查詢指定目錄的檔案}
procedure TForm1.btn_SearchClick(Sender: TObject);
begin
  FindFile(Trim(edit_FileName.Text));
end;


{自定義檔案查詢方法}
procedure TForm1.FindFile(filename: string);
var
  path : string;
begin
  if FindFirst(filename + '*.*',faAnyFile,search)=0 then  //
    begin
      if (search.Name<>'.') and (search.Name<>'..') then    //判斷路徑下是否還包含子路徑
        memo_showfile.Lines.Add(search.Name);
      while FindNext(search) = 0 do
      begin
        path := filename + '\'+search.Name+'\';
        if(search.Name<>'.') and(search.Name<>'..') then
          memo_showfile.Lines.Add(search.Name);
        if (search.Attr = faDirectory) and (search.Name<>'.') and (search.Name<>'..') then
          FindFile(path);    //如果search.Name為目錄,則重新執行FindFile函式
      end;
      Caption := IntToStr(memo_showfile.Lines.Count);  //顯示記錄條數
    end;
end;

{停止查詢}
procedure TForm1.btn_StopSearchClick(Sender: TObject);
begin
  FindClose(search);
end;

對於FindFirst、FindNext來說,F.Attr=32表示檔案;F.Attr = 16表示目錄。