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表示目錄。