小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

文件與目錄的專題

 佚名2016 2016-08-26

文件管理包括:文件操作、目錄操作和驅(qū)動(dòng)器操作3 部分。

文件操作所用到的函數(shù)與方法

  1:AssignFile方法

      將一個(gè)外部文件的文件名與一個(gè)File 類型的變量關(guān)聯(lián),對(duì)File 類型的變量進(jìn)行初始化

  2:Append 方法

     在文件結(jié)尾處增加一行內(nèi)容

  3:CloseFile方法

     用來(lái)關(guān)閉文件,同時(shí)將文件記錄盤上的文件與相關(guān)文件變量斷開聯(lián)系。

示例:

Var

    F:TextFile;

begin

   if OpenDialog1.Execute then

   begin

   AssignFile(F,OpenDialog1.FileName);

   Append(F);

   Writeln(F,’寫入一行內(nèi)容’);

   CloseFile(F);

   end;

end;

4:DeleteFile 函數(shù)

  將一個(gè)文件從記錄盤上刪除,如果文件不存在或無(wú)法刪除,則返回False。

    if OpenDialog1.Execute then

    if DeleteFile(OpenDialog1.FileName) then

    ShowMessage(’刪除文件成功’)

    else

   ShowMessage(’刪除文件失敗’);

 

5:Eof 函數(shù)  與 Eoln 函數(shù)

   判斷是否到了文件的結(jié)尾。如果文件為空或當(dāng)前位置在最后一個(gè)字符之后,則返回True;

   否則,返回False

   Eoln 函數(shù)測(cè)試文件指針是否指向一行的最后,適用于文本文件。如果當(dāng)前的位置在一行的末尾或

   Eof(F)函數(shù)返回的是True,則Eoln 函數(shù)返回的是True;否則,返回False。

 

6: Erase 過(guò)程

     Erase 過(guò)程用于刪除一個(gè)已經(jīng)存在的文件。如果文件被打開,先關(guān)閉該文件再執(zhí)行刪除操作。過(guò)程

     原型如下:

      procedure Erase(var F);

 

7:FileExists 函數(shù)

    用于測(cè)試指定文件名的文件是否存在。如果文件存在,返回True;否則,返回False。

    函數(shù)原型如下:

    function FileExists(const FileName: string): Boolean;

8:FileGetAttr 函數(shù)

    用于獲取一個(gè)文件的屬性設(shè)置。函數(shù)原型如下:

    function FileGetAttr(const FileName: string): Integer;

   返回的結(jié)果有:

    FaReadOnly  1 只讀文件

    FaHidden  2 隱藏文件

    FaSysFile 4 系統(tǒng)文件

    FaVolumeID  8 卷標(biāo)志文件

    FaDirectory  16 目錄文件

    FaArchive  32 存檔文件

    FaAnyFile  64 所有類型文件

    如果得到的是33, 說(shuō)明 即是存檔文件 32, 也是只讀文件,  依此類推

9:Write 過(guò)程

    用來(lái)向一個(gè)文件中添加內(nèi)容。過(guò)程原型如下:

    procedure Write( [var F: Text; ] P1 [ , P2,..., Pn] ); //文本文件

    procedure Write(F, V1,...,Vn); //有類型文件

   在使用Write 過(guò)程之前,首先要AssignFile 過(guò)程指派給一個(gè)外部文件,然后以寫文件的方式打開。

   以下代碼實(shí)現(xiàn)了向一個(gè)文件中添加內(nèi)容的功能。

 

10.Writeln 過(guò)程

   Writeln 過(guò)程用來(lái)向文本文件中添加一行內(nèi)容,即在寫入內(nèi)容后面有回車換行符。過(guò)程原型如下:

   procedure Writeln([ var F: Text; ] P1 [, P2, ...,Pn ] );

   Writeln 過(guò)程的應(yīng)用方法和Write 過(guò)程的應(yīng)用方法一

 

 

無(wú)類型文件操作--------------------------

unit Unit1;

  interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Memo1: TMemo;
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    Button4: TButton;
    Button5: TButton;
    Button6: TButton;
    Button7: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
    procedure Button5Click(Sender: TObject);
    procedure Button6Click(Sender: TObject);
    procedure Button7Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

const
  FileName = 'c:\temp\binary.dat';
var
  F: file;

//用無(wú)類型的方式寫入一個(gè)字節(jié)
procedure TForm1.Button1Click(Sender: TObject);
var
  b: Byte;
begin
  AssignFile(F,FileName);
  Rewrite(F,1); //第二個(gè)參數(shù)表示: 把 1 個(gè)字節(jié)當(dāng)作一個(gè)寫入單位

  b := 65;
  BlockWrite(F,b,1); //寫入; 參數(shù)2是要寫入的內(nèi)容; 參數(shù)3表示寫入 1 次.

  CloseFile(F);
//落實(shí) binary.dat 的大小: 1個(gè)字節(jié); 內(nèi)容: A (可用記事本打開)
end;


//用無(wú)類型的方式讀出一個(gè)字節(jié)
procedure TForm1.Button2Click(Sender: TObject);
var
  b: Byte;
begin
  AssignFile(F,FileName);
  Reset(F,1); //把 1 個(gè)字節(jié)當(dāng)作一個(gè)讀取單位

  BlockRead(F,b,1); //讀取一次; 放入 b
  ShowMessage(Chr(b)); //A

  CloseFile(F);
end;


//寫入更多字節(jié)
procedure TForm1.Button3Click(Sender: TObject);
var
  buffer: array[0..127] of Byte;
  i: Integer; //儲(chǔ)存多個(gè)字節(jié), 需要用數(shù)組了
begin
  for i := Low(buffer) to High(buffer) do
    buffer[i] := i; //給數(shù)組賦值, 注意現(xiàn)在數(shù)組大小是 128

  AssignFile(F,FileName);
  Rewrite(F,32); //規(guī)定把 32 個(gè)字節(jié)當(dāng)作一個(gè)讀取單位, 注意這個(gè)數(shù)字和緩沖區(qū)大小必須是倍數(shù)關(guān)系

  BlockWrite(F,buffer,4); //需要寫入幾次呢? 128/32=4

  CloseFile(F);
//寫成的文件肯定是128字節(jié)大小, 但用記事本可能看不了, 因?yàn)檫@個(gè)二進(jìn)制不是文本
end;


//讀出
procedure TForm1.Button4Click(Sender: TObject);
var
  buffer: array[0..127] of Byte;
  i: Integer;
begin
  AssignFile(F,FileName);
  Reset(F,4); //把 4 字節(jié)當(dāng)作一個(gè)讀取單位; 為了那個(gè)倍數(shù)關(guān)系, 這里一般是 1

  BlockRead(F,buffer,32); //當(dāng)然需要 32 次才能讀完

  CloseFile(F);

  //怎么顯示一下呢? 還是用 Memo 吧; 顯示字符? 數(shù)字? 還是十六進(jìn)制吧
  Memo1.Clear;
  for i := Low(buffer) to High(buffer) do
  begin
    Memo1.Lines.Add(IntToHex(buffer[i],1));
  end;
(*顯示結(jié)果: 0 1 2 3 ... 7D 7E 7F *)

end;


//讀寫 Char 與實(shí)際讀寫字節(jié)
procedure TForm1.Button5Click(Sender: TObject);
var
  cArr1,cArr2: array[0..4] of Char;
  i: Integer;
  num: Integer; //記錄實(shí)際讀寫的字節(jié)數(shù)
begin
  for i := Low(cArr1) to High(cArr1) do
    cArr1[i] := Chr(65+i); //填充 A B C D E

  AssignFile(F,FileName);
  Rewrite(F,1); //建立

  BlockWrite(F,cArr1,Length(cArr1),num); //參數(shù)4: num 是實(shí)際寫入的字節(jié)數(shù)
  ShowMessage(IntToStr(num)); //5

  Reset(F,1); //重新打開

  BlockRead(F,cArr2,Length(cArr2),num); //參數(shù)5: num 是實(shí)際讀出的字節(jié)數(shù)
  ShowMessage(IntToStr(num)); //5

  ShowMessage(cArr2); //ABCDE

  CloseFile(F);
end;


//寫入長(zhǎng)字符串, 讀出其十六進(jìn)制碼
procedure TForm1.Button6Click(Sender: TObject);
var
  p: PChar;
  b: Byte;
begin
  p := '萬(wàn)一的 Delphi 博客';

  AssignFile(F,FileName);     //關(guān)聯(lián)文件名
  Rewrite(F,1);               //創(chuàng)建并打開
  BlockWrite(F,p,Length(p));  //寫入


  FileMode := fmOpenRead;     //這時(shí)可以設(shè)文件為只讀
  Reset(F,1);                 //為讀取打開

  Memo1.Clear;
  while not Eof(F) do
  begin
    BlockRead(F,b,1);
    Memo1.Text := Memo1.Text + IntToHex(b,2) + ' ';
  end;
  //顯示結(jié)果: 70 F0 45 00 08 F7 12 00 A6 FB 43 00 A0 1A E5 00 FF C5

  CloseFile(F);
end;


//復(fù)制個(gè)文件
procedure TForm1.Button7Click(Sender: TObject);
var
  FromF,ToF: file;
  NumRead,NumWritten: Integer;
  Buffer: array[1..2048] of Byte;
begin
  AssignFile(FromF, 'c:\temp\test1.dat'); //假定有這個(gè)文件
  Reset(FromF, 1);
  AssignFile(ToF, 'c:\temp\test2.dat');
  Rewrite(ToF, 1);

  repeat
    BlockRead(FromF, Buffer, SizeOf(Buffer), NumRead);
    BlockWrite(ToF, Buffer, NumRead, NumWritten);
  until (NumRead = 0) or (NumWritten <> NumRead);
  { NumRead=0 表示讀完了; NumWritten <> NumRead 表示磁盤空間不夠了 }

  CloseFile(FromF);
  CloseFile(ToF);
end;

end.

--------------------

 

目錄的管理

1:ChDir 過(guò)程

改變當(dāng)前的目錄。如果在指定路徑中包含有驅(qū)動(dòng)器號(hào)(盤符),則相應(yīng)地改變當(dāng)前的驅(qū)動(dòng)器。

 

2.CreateDir 函數(shù)

新建一個(gè)目錄。如果創(chuàng)建成功,則返回True;否則返回False。函數(shù)原型如下:

function CreateDir(const Dir: string): Boolean;

例如要在C 盤根目錄下建立一個(gè)Tem 目錄可以編寫如下代碼:

如果想在“C:\Acc”目錄下建立一個(gè)“A”目錄,而“C:\Acc”目錄不存在,以下的代碼將不能創(chuàng)

建“A”目錄。

CreateDir(’C:\Acc\A’);

 

3.DirectoryExists 函數(shù)

檢測(cè)指定的目錄是否存在。如果存在,函數(shù)則返回True;否則,返回False。函數(shù)原型如下:

function DirectoryExists(Name: string): Boolean;

如果在參數(shù)Name 中指定的不是絕對(duì)路徑,則使用相對(duì)路徑,默認(rèn)在當(dāng)前目錄中進(jìn)行查詢。

 

4.ForceDirectories 函數(shù)

創(chuàng)建指定的目錄。通常在創(chuàng)建一個(gè)目錄的時(shí)候,其父級(jí)目錄必須存在。但是使用ForceDirectories

創(chuàng)建目錄的時(shí)候就沒(méi)有這個(gè)限制,可以將所需的所有目錄一次創(chuàng)建。如果創(chuàng)建成功,則函數(shù)返回True;

如果有任何一個(gè)目錄創(chuàng)建失敗,則返回False。函數(shù)原型如下:

function ForceDirectories(Dir: string): Boolean;

 

5.GetCurrentDir 函數(shù)

獲取當(dāng)前目錄的絕對(duì)路徑。函數(shù)原型如下

 

6.GetDir 過(guò)程

獲取指定驅(qū)動(dòng)器中的當(dāng)前目錄。過(guò)程原型如下:

參數(shù)D 為指定的驅(qū)動(dòng)器。當(dāng)D 的數(shù)值為0 時(shí),表示默認(rèn)的驅(qū)動(dòng)器;數(shù)值為1 時(shí),表示A 驅(qū)動(dòng)器;

數(shù)值為3 時(shí),表示C 驅(qū)動(dòng)器,依次類推。如果指定的驅(qū)動(dòng)器不存在,則參數(shù)S 的數(shù)值設(shè)置為當(dāng)前的目

 

7.MkDir 過(guò)程

新建一個(gè)目錄。過(guò)程原型如下:

procedure MkDir(S: string);

MkDir 過(guò)程的用法與CreateDir 過(guò)程的用法一樣,都只能在已經(jīng)存在的路徑下創(chuàng)建一層目錄,MkDir

過(guò)程在不存在的路徑下創(chuàng)建目錄時(shí)會(huì)提示錯(cuò)誤,而CreateDir 過(guò)程則不提示

 

8.RemoveDir 函數(shù)

刪除一個(gè)存在的目錄,目錄必須為空(即目錄里面不能包含目錄或文件)。函數(shù)原型如下:

function RemoveDir(const Dir: string): Boolean;

如果刪除目錄成功,則返回True;否則,返回False。

 

9.RmDir 過(guò)程

刪除一個(gè)存在的目錄,目錄必須為空。過(guò)程原型如下:

procedure RmDir(S: string);

如果要?jiǎng)h除的目錄不為空,或沒(méi)有此目錄,RmDir 過(guò)程會(huì)提示錯(cuò)誤,而RemoveDir 函數(shù)則不提示

錯(cuò)誤。

 

10.SelectDirectory 函數(shù)

通過(guò)顯示一個(gè)對(duì)話框來(lái)讓用戶選擇一個(gè)目錄。

注意:在使用前要在Uses 語(yǔ)句中添加包含F(xiàn)ileCtrl 的說(shuō)明。

函數(shù)原型如下:

function SelectDirectory(const Caption: string; const Root: WideString;

out Directory: string): Boolean; overload;

function SelectDirectory(var Directory: string; Options: TSelectDirOpts;

HelpCtx: Longint): Boolean; overload;

對(duì)于第1 個(gè)重載函數(shù),參數(shù)Caption 為對(duì)話框的標(biāo)題內(nèi)容;參數(shù)Root 指定一個(gè)目錄,為進(jìn)行瀏覽

的最初目錄;選中的目錄保存在參數(shù)Directory 中。

對(duì)于第2 個(gè)重載函數(shù),參數(shù)Directory 中指定的目錄為對(duì)話框顯示時(shí)選中的目錄,最后用戶選定的

目錄也保存在參數(shù)Directory 中;參數(shù)Options 為一些設(shè)置項(xiàng)目的集合,如果為空,則用戶通過(guò)對(duì)話框

只能選擇已經(jīng)存在的目錄,沒(méi)有提供編輯框給用戶來(lái)輸入一個(gè)新的目錄名。TSelectDirOpts 類型定義

 

如下:

type

TSelectDirOpt = (sdAllowCreate, sdPerformCreate, sdPrompt);

TSelectDirOpts = set of TSelectDirOpt;

具體數(shù)值的含義如下。

sdAllowCreate 對(duì)話框中有一個(gè)Edit 組件,用戶可以輸入新的目錄名。但是如果要新建該目錄,

程序員必須根據(jù)獲取的文件自己編寫代碼新建目錄。

sdPerformCreate 對(duì)話框中有一個(gè)Edit 組件,用戶可以輸入一個(gè)不存在的目錄名,對(duì)話框?qū)⑦x中

該目錄并創(chuàng)建該目錄。

sdPrompt 對(duì)話框中有一個(gè)Edit 組件,如果用戶輸入的目錄名不存在,則顯示一個(gè)信息對(duì)話框提

示是否創(chuàng)建新目錄。如果同時(shí)選中的是sdAllowCreate 設(shè)置,則程序員必須根據(jù)獲取的文件自己編寫

代碼新建目錄。

 

 

11.SetCurrentDir 函數(shù)

設(shè)置系統(tǒng)的當(dāng)前目錄。函數(shù)原型如下:

function SetCurrentDir(const Dir: string): Boolean;

如果設(shè)置當(dāng)前目錄成功,則返回True;否則返回False。

 

 

驅(qū)動(dòng)器

1.DiskFree 函數(shù)

獲取指定驅(qū)動(dòng)器中剩余空間的字節(jié)數(shù)。函數(shù)原型如下:

function DiskFree(Drive: Byte): Int64;

 

2.DiskSize 函數(shù)

獲取指定驅(qū)動(dòng)器容量,單位為字節(jié)數(shù)。函數(shù)原型如下:

function DiskSize(Drive: Byte): Int64;

DiskSize 函數(shù)的用法與DiskFree 函數(shù)一樣,其Drive 參數(shù)的取值也相同,將上面代碼中的DiskFree

更換為DiskSize 就能夠獲得C 盤驅(qū)動(dòng)器的容量了。

此外,一些其他的驅(qū)動(dòng)器信息可以通過(guò)目錄操作函數(shù)來(lái)獲得。

 

文件類型的輸入輸出

在Delphi 中把文件分為3 種:文本文件、類型文件和無(wú)類型文件。文本文件指可以被任意文件編

輯器讀取的ASCII 文件。類型文件指包含由程序員定義的數(shù)據(jù)類型的文件。無(wú)類型文件包含了其他所

有的類型,它是對(duì)包含任意格式或無(wú)格式數(shù)據(jù)的文件的統(tǒng)稱。

 

無(wú)類型文件

文本文件和類型文件的字節(jié)數(shù)可以通過(guò)代碼得到,但不是所有的文件都能做到,例如RTF 文件。

雖然RTF 文件中也包含文本文件,但是它還有其他的格式屬性,所以需要使用識(shí)別RTF 格式的編輯

器才可以進(jìn)行瀏覽。

無(wú)類型文件是由數(shù)據(jù)塊序列組成的,每個(gè)數(shù)據(jù)塊為128 字節(jié)大小的數(shù)據(jù)。無(wú)類型文件數(shù)據(jù)的讀寫

操作可以利用數(shù)據(jù)塊實(shí)現(xiàn)。無(wú)類型文件的操作步驟與文本文件的操作步驟基本相同,其操作方法也與

前面兩種文件的操作方法基本相同,只是調(diào)用的函數(shù)略有差異。

 

 

目錄與驅(qū)動(dòng)器

獲取System 目錄

獲取System 目錄只需要用一個(gè)Win32 函數(shù)就能夠?qū)崿F(xiàn),此函數(shù)為GetSystemDirectory,它的原型

如下:

UINT GetSystemDirectory(

LPTSTR lpBuffer, //變量

UINT

 

procedure TForm1.Button1Click(Sender: TObject);

var

MySysPath:PChar;

begin

GetMem(MySysPath,255);

GetSystemDirectory(MySysPath,255); //取得系統(tǒng)目錄

Edit1.Text:=MySysPath;

end;

――――――――――――

獲取Windows 目錄

要獲取Windows 目錄的位置可以調(diào)用Win32 的GetWindowsDirectory() 。該函數(shù)類似于

GetSystemDirectory(),其返回值的含義也與GetSystemDirectory()相同。該函數(shù)的用法如下:

procedure TForm1.Button1Click(Sender: TObject);

var

MyWinPath:String;

begin

SetLength(MyWinPath,144);

if GetWindowsDirectory(PChar(MyWinPath),144)<>0 then

begin

SetLength(MyWinPath,Length(PChar(MyWinPath)));

Edit1.Text:=MyWinPath;

end

else

RaiseLastWin32Error;

end;

如果函數(shù)調(diào)用成功,GetWindowsDirectory()返回目錄路徑的長(zhǎng)度(整數(shù)值),否則返回0,表明有

錯(cuò)誤產(chǎn)生。這時(shí)可以調(diào)用RaiseLastWin32Error()來(lái)分析產(chǎn)生錯(cuò)誤的原因。

 

GetCurrentDirectory

獲取當(dāng)前目錄

 

獲取可用驅(qū)動(dòng)器信息

驅(qū)動(dòng)器分為多種類型,可以使用GetDriveType 函數(shù)來(lái)查看,該函數(shù)的原型如下:

UINT GetDriveType(LPCTSTR lpRootPathName);

該函數(shù)有7 種返回值,每個(gè)返回值對(duì)應(yīng)的驅(qū)動(dòng)器類型如下。

0:不能判斷的驅(qū)動(dòng)器類型。

1:根目錄不存在。

DRIVE_REMOVABLE:這是一個(gè)可移動(dòng)驅(qū)動(dòng)器。

DRIVE_FIXED:這是硬盤驅(qū)動(dòng)器。

DRIVE_REMOTE:這是一個(gè)網(wǎng)絡(luò)驅(qū)動(dòng)器。

DRIVE_CDROM:這是一個(gè)光盤驅(qū)動(dòng)器。

DRIVE_RAMDISK:這是一個(gè)虛擬硬盤。

驅(qū)動(dòng)器的容量可以用GetDiskFreeSpace 函數(shù)來(lái)獲取,該函數(shù)的原型如下: 

 

 

 

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多