一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

Delphi 文件處理(2)

 cardoo 2016-05-28

1. 文件管理類函數(shù)


判斷文件是否存在 FileExists                              判斷文件夾是否存在 DirectoryExists


刪除文件 DeleteFile; Windows.DeleteFile          刪除文件夾 RemoveDir; RemoveDirectory


獲取當(dāng)前文件夾 GetCurrentDir                          設(shè)置當(dāng)前文件夾 SetCurrentDir; ChDir; SetCurrentDirectory


獲取指定驅(qū)動器的當(dāng)前路徑名 GetDir                文件改名 RenameFile


建立文件夾 CreateDir; CreateDirectory; ForceDirectories                    刪除空文件夾 RemoveDir; RemoveDirectory


獲取當(dāng)前文件的版本號 GetFileVersion               獲取磁盤空間 DiskSize; DiskFree


查找一個文件 FileSearch                                   搜索文件 FindFirst; FindNext; FindClose


讀取與設(shè)置文件屬性 FileGetAttr; FileSetAttr                                            獲取文件的創(chuàng)建時間 FileAge; FileDateToDateTime


 


1.1 API 文件處理函數(shù)


1. GetWindowsDirectory - 獲取 Windows 所在目錄


//聲明:GetWindowsDirectory( 


                  lpBuffer: PChar;{緩沖區(qū)} 


                  uSize: UINT     {緩沖區(qū)大小}):
UINT;         {返回實際長度}


num := GetWindowsDirectory(arr, MAX_PATH);


2. GetSystemDirectory - 返回 System 文件夾路徑


//聲明:

GetSystemDirectory(

  lpBuffer: PChar; {緩沖區(qū)}

  uSize: UINT      {緩沖區(qū)大小}

): UINT;           {返回實際長度}


num := GetSystemDirectory(arr, MAX_PATH);  


3.GetTempPath - 獲取臨時文件夾路徑


//聲明:

GetTempPath(

  nBufferLength: DWORD; {緩沖區(qū)大小}

  lpBuffer: PChar       {緩沖區(qū)}

): DWORD;               {返回實際長度}

num := GetTempPath(MAX_PATH, arr) 


 


4.GetTempFileName - 生成一個臨時文件名


 


5.CopyFile - 復(fù)制文件


//聲明:

CopyFile(

  lpExistingFileName: PChar; {源文件}

  lpNewFileName: PChar;      {目標(biāo)文件}

  bFailIfExists: BOOL        {如果目標(biāo)文件存在, True: 失敗; False: 覆蓋}

): BOOL;



6.CreateDirectory - 建立文件夾


CreateDirectory(PChar(dir),
nil
);


 


7.CreateDirectoryEx - 根據(jù)模版建立文件夾


CreateDirectoryEx(PChar(TDir), PChar(Dir),nil);


 


8.RemoveDirectory - 刪除空目錄//聲明:

RemoveDirectory(

  lpPathName: PAnsiChar {目錄名}

): BOOL;


if RemoveDirectory(PChar(Dir))then 


 


9.SetCurrentDirectory、GetCurrentDirectory - 設(shè)置與獲取當(dāng)前目錄


SetCurrentDirectory('c:\temp'); 


GetCurrentDirectory(SizeOf(buf), buf);


 


10.SetVolumeLabel - 設(shè)置磁盤卷標(biāo)


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;

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

//讀取關(guān)鍵字 Read  ReadSection  ...Key
procedure TMainForm.Button4Click(Sender: TObject);
begin
  List := TStringList.Create;
  Fini.ReadSection('Delphi xe Title',List);
  ShowMessage(List.Text);  //AString Key
end;

//刪除節(jié)點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');         {讀取 小節(jié)}
  ShowMessage(BoolToStr(b));
  b := Fini.ValueExists('Delphi xe Title','AString Key'); {讀取}
  ShowMessage(BoolToStr(b));
  s := Fini.FileName;                     {文件名}
  ShowMessage(s);
end;


 


3.文本文件 讀寫


Delphi 支持三種文件類型: 文本文件、記錄文件、無類型文件。



文本文件是以行為單位進(jìn)行讀、寫的。由于每一行的長度不一定相同,不能計算出給定行在文件中的確切位置,因而只能順序地讀寫。

文本文件只能單獨為讀或?qū)懚蜷_,在一個打開的文本文件上同時進(jìn)行讀、寫操作是不允許的。



文本文件的打開需要兩個步驟:1.文件變量與文件名關(guān)聯(lián);2.初始化讀寫。



1.文件變量與文件名關(guān)聯(lián): 

AssignFile(VarTxt, FileName);

FileName 如果省略路徑將默認(rèn)當(dāng)前目錄。



2.初始化讀寫有三種方式:

(1) Reset: 只讀打開, 指針移到文件頭;

(2) Rewrite: 創(chuàng)建新文件并打開, 只寫;

(3) Append: 從尾部追加, 指針當(dāng)然在文件尾。



文件不存在時使用 Reset 或 Append 會引發(fā)一個I/O異常。



最后用 CloseFile 關(guān)閉文件。




 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. 結(jié)構(gòu)化文件存取


AssignFile: 關(guān)聯(lián)

Rewrite: 創(chuàng)建并打開一個新文件, 如已存在則覆蓋

Reset: 打開已存在的文件; 追加也要用它先打開, 然后再移動指針; Append 是文本文件專用的

CloseFile: 關(guān)閉



FileSize: 記錄數(shù)

FilePos: 返回文件的當(dāng)前位置

Seek: 把文件指針移到指定位置(只用于結(jié)構(gòu)化文件)

Eof: 文件尾



Read: 讀

Write: 寫



另外: 包含長字符串、變量、類實例、接口或動態(tài)數(shù)組的記錄不能寫入類型文件中!


 


type
  TPersonrec = packed record
    name: string[12];
    age: Word;
    birthday: TDate;
  end; //先定義一個結(jié)構(gòu)

  var
    DataFile: file of TPersonRec;  //聲明 DataFile 用來讀寫 TPersonRec 結(jié)構(gòu)數(shù)據(jù) 

    PersonRec: TPersonRec;  //聲明結(jié)構(gòu)變量   

     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','默認(rèn)值',
buf, Length(buf), PChar(FilePath));


 


6.復(fù)雜的結(jié)構(gòu)化存取


有些文檔不是結(jié)構(gòu)化的, 譬如記事本文件; 結(jié)構(gòu)化的檔可以分為以下幾類:

標(biāo)準(zhǔn)結(jié)構(gòu)化文檔、自定義結(jié)構(gòu)化文檔(譬如 bmp 文件)和復(fù)合文檔.



這里要談到的結(jié)構(gòu)化儲存(復(fù)合文檔)是由 Windows 系統(tǒng)通過 COM 提供的, 它能完成像 Windows 目錄結(jié)構(gòu)一樣復(fù)雜的文件結(jié)構(gòu)的存取; 提示一下 Windows 的目錄結(jié)構(gòu): 一個目錄下可以包含子目錄和文件, 然后層層嵌套...



有時我們要存儲的文件也可能會層層分支, 具體的文件內(nèi)容也可能五花八門, 譬如分支當(dāng)中的某個文件是張圖片、是一個字符串列表、是一個記錄(或叫結(jié)構(gòu))等等, 存儲這樣的文件內(nèi)容恐怕用數(shù)據(jù)庫也是無能為力的.



這種復(fù)合文件支持多線程, 不同的進(jìn)程中的不同線程可以同時訪問一個復(fù)合文件的不同部分.



復(fù)合文件最典型的實例就是 OLE(譬如在 Word 中可以嵌入電子表格); 這也或許是這種復(fù)合文件的來由.



或許有了這個東西, 出品屬于自己的文件格式就成了輕而易舉的事情了.



存取和訪問復(fù)合文檔主要使用定義在 Activex 單元的三個 COM 接口:

IStorage (類似于 Windows 的目錄, 也就是文件夾);

IStream (類似于目錄中的文件, 不過在這里都是"流", 每個流至少要占用 512 字節(jié));

IEnumStatStg (用于列舉 IStorage 的層次結(jié)構(gòu))



"接口" 又是一個復(fù)雜的概念, 暫時把它認(rèn)作是一組函數(shù)的集合吧.



7. 復(fù)制文件


procedure TForm1.Button1Click(Sender: TObject);


const 


   SourceDir = 'C:\Temp\Folder1';{ 源文件夾必須存在
}
 


   DestDir = 'C:\Temp\Folder2'{ 如果目標(biāo)文件夾不存在,
程序會自動創(chuàng)建 }


begin 


  TDirectory.Copy(SourceDir, DestDir);


end;







 


 


 


  

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

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多

    欧美一区日韩二区亚洲三区| 日韩国产中文在线视频| 中文字幕有码视频熟女| 国产黑人一区二区三区| 老司机精品线观看86| 亚洲欧美日韩网友自拍| 日韩成人h视频在线观看| 午夜视频成人在线免费| 98精品永久免费视频| 国产精品99一区二区三区| 日韩专区欧美中文字幕| 午夜午夜精品一区二区| 亚洲一区二区三区有码| 亚洲中文字幕人妻系列| 久久综合日韩精品免费观看| 99国产高清不卡视频| 免费福利午夜在线观看| 国产一区二区三区精品免费| 熟女中文字幕一区二区三区| 日韩免费午夜福利视频| 四季精品人妻av一区二区三区| 国产日韩综合一区在线观看| 91精品日本在线视频| 国产亚洲欧美日韩精品一区 | 日本欧美一区二区三区高清| 亚洲国产中文字幕在线观看 | 五月情婷婷综合激情综合狠狠 | 国产免费成人激情视频| 91久久精品国产一区蜜臀| 日本少妇中文字幕不卡视频| 国产精品乱子伦一区二区三区 | 国产精品伦一区二区三区在线| 日本不卡在线视频你懂的| 国产又大又硬又粗又黄| 欧美日韩一区二区综合| 九七人妻一区二区三区| 日本少妇中文字幕不卡视频 | 亚洲av日韩av高潮无打码| 亚洲国产色婷婷久久精品| 久久精品视频就在久久| 真实国产乱子伦对白视频不卡 |