Delphi 文件处理(2)

1. 文件管理类函数

判断文件是否存在 FileExists                              判断文件夹是否存在 DirectoryExists

删除文件 DeleteFile; Windows.DeleteFile          删除文件夹 RemoveDir; RemoveDirectory

获取当前文件夹 GetCurrentDir                          设置当前文件夹 SetCurrentDir; ChDir; SetCurrentDirectory

获取指定驱动器的当前路径名 GetDir                文件改名 RenameFile

建立文件夹 CreateDir; CreateDirectory; ForceDirectories                    删除空文件夹 RemoveDir; RemoveDirectory

获取当前文件的版本号 GetFileVersion               获取磁盘空间 DiskSize; DiskFree

查找一个文件 FileSearch                                   搜索文件 FindFirst; FindNext; 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: BOOL        {如果目标文件存在, 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 文件读取

[delphi]  view plain  copy
  1. private  
  2.     List: TStrings;  
  3.     Fini: TIniFile;  
  4.     Path: string;  
  5.     Section,Key: string;  
  6.     { Private declarations }  
  7.   public  
  8.     { Public declarations }  
  9.   end;  
  10.   
  11. var  
  12.   MainForm: TMainForm;  
  13.   
  14. implementation  
  15. uses  
  16.   ShellAPI;  
  17.   
  18. {$R *.dfm}  
  19.   
  20. { 
  21.   INI File =============================================================== 
  22. }  
  23. procedure TMainForm.FormCreate(Sender: TObject);  
  24. begin  
  25.   Path := ChangeFileExt(ParamStr(0),'.ini');  
  26.   Fini := TIniFile.Create(Path);  
  27. end;  
  28.   
  29. //写入 Write  INI  
  30. procedure TMainForm.Button1Click(Sender: TObject);  
  31. begin  
  32.   Section := 'Delphi xe Title';  
  33.   Key := 'Astring Key';  
  34.   Fini.WriteString(Section,Key,'a_string value');  
  35.   ShellExecute(0,'open',PAnsiChar(Path),nil,nil,sw_show);  
  36. end;  
  37.   
  38. //读取 Read INI  
  39. procedure TMainForm.Button2Click(Sender: TObject);  
  40. var  
  41.   s: string;  
  42. begin  
  43.   s := Fini.ReadString('Delphi xe Title','Astring Key','');  
  44.   ShowMessage(s);  
  45. end;  
  46.   
  47. //读取 字节Read ReadSections ....Section  
  48. procedure TMainForm.Button3Click(Sender: TObject);  
  49. begin  
  50.   List := TStringList.Create;  
  51.   Fini.ReadSections(List);  
  52.   ShowMessage(List.Text);    //Delphi xe Title  
  53. end;  
  54.   
  55. //读取关键字 Read  ReadSection  ...Key  
  56. procedure TMainForm.Button4Click(Sender: TObject);  
  57. begin  
  58.   List := TStringList.Create;  
  59.   Fini.ReadSection('Delphi xe Title',List);  
  60.   ShowMessage(List.Text);  //AString Key  
  61. end;  
  62.   
  63. //删除节点DeleteKey   
  64.   
  65. procedure TMainForm.Button5Click(Sender: TObject);  
  66. begin  
  67.   Fini.DeleteKey('Delphi xe Title','AString Key');  
  68. end;  
  69.   
  70. //删除全部  EraseSection  
  71. procedure TMainForm.Button6Click(Sender: TObject);  
  72. begin  
  73.   Fini.EraseSection('Delphi xe Title');  
  74. end;  
  75.   
  76. //Other...  
  77. procedure TMainForm.Button7Click(Sender: TObject);  
  78. var  
  79.   b: Boolean;  
  80.   s: string;  
  81. begin  
  82.   b := Fini.SectionExists('Delphi xe Title');         {读取 小节}  
  83.   ShowMessage(BoolToStr(b));  
  84.   b := Fini.ValueExists('Delphi xe Title','AString Key'); {读取}  
  85.   ShowMessage(BoolToStr(b));  
  86.   s := Fini.FileName;                     {文件名}  
  87.   ShowMessage(s);  
  88. end;  

 

3.文本文件 读写

Delphi 支持三种文件类型: 文本文件、记录文件、无类型文件。

文本文件是以行为单位进行读、写的。由于每一行的长度不一定相同,不能计算出给定行在文件中的确切位置,因而只能顺序地读写。
文本文件只能单独为读或写而打开,在一个打开的文本文件上同时进行读、写操作是不允许的。

文本文件的打开需要两个步骤:1.文件变量与文件名关联;2.初始化读写。

1.文件变量与文件名关联: 
AssignFile(VarTxt, FileName);
FileName 如果省略路径将默认当前目录。

2.初始化读写有三种方式:
(1) Reset: 只读打开, 指针移到文件头;
(2) Rewrite: 创建新文件并打开, 只写;
(3) Append: 从尾部追加, 指针当然在文件尾。

文件不存在时使用 Reset 或 Append 会引发一个I/O异常。

最后用 CloseFile 关闭文件。

[delphi]  view plain  copy
  1.  var  
  2.     F: Text;  
  3.     FileName: string = 'D:\Delphi Study N\15.Delphi File\a.txt';  
  4.   
  5. { 
  6.   Text File ================================================ 
  7. }  
  8.   
  9. //写入 Write Txt  
  10. procedure TMainForm.Button8Click(Sender: TObject);  
  11. begin  
  12.   AssignFile(F,FileName);  
  13.   Rewrite(F);  //没有就覆盖  
  14.   
  15.   writeln(F,'One');  
  16.   Writeln(F,'Two');  
  17.   
  18.   CloseFile(F);  
  19.     
  20.   ShellExecute(0,'Open',PAnsiChar(FileName),nil,nil,SW_SHOW);  
  21. end;  
  22.   
  23. //读取 Read Txt  
  24. procedure TMainForm.Button9Click(Sender: TObject);  
  25. var  
  26.   s: string;  
  27. begin  
  28.   AssignFile(F,FileName);  
  29.   Reset(F);  
  30.   
  31.   Readln(F,s);  
  32.   ShowMessage(s);  
  33.   
  34.   CloseFile(F);  
  35. end;  
  36.   
  37. //增加 Add Txt  
  38. procedure TMainForm.Button10Click(Sender: TObject);  
  39. begin  
  40.   AssignFile(F,FileName);  
  41.   Append(F);  
  42.   
  43.   Writeln(F,'Three');  
  44.   Writeln(F,'Four');  
  45.   
  46.   CloseFile(F);  
  47.   ShellExecute(0,'Open',PAnsiChar(FileName),nil,nil,SW_SHOW);  
  48. end;  
  49.   
  50. //Read All Txt  
  51. procedure TMainForm.Button11Click(Sender: TObject);  
  52. var  
  53.   s: string;  
  54. begin  
  55.   AssignFile(F,FileName);  
  56.   Reset(F);  
  57.   
  58.   while not Eof(F) do  
  59.   begin  
  60.     Readln(F,s);  
  61.     Memo1.Lines.Add(s);  
  62.   end;  
  63.   CloseFile(F);  
  64. end;  
  65.   
  66. //Write and Read Not same type 写入和读取不同的类型  
  67. procedure TMainForm.Button12Click(Sender: TObject);  
  68. var  
  69.   name: string[6];  
  70.   age: Word;  
  71.   birthday: TDate;  
  72. begin  
  73.   AssignFile(F,FileName);  
  74.   Rewrite(F);  
  75.   
  76.   name := 'lailai ';  //????6?才  
  77.   age := 25;  
  78.   birthday := StrToDate(DateToStr(Now-25*365));  //安さぱ?ネら  
  79.   Writeln(F,name,age,birthday);  
  80.   
  81.   CloseFile(F);  
  82.   Reset(F);  
  83.   
  84.   Readln(F,name,age,birthday);  
  85.   Memo1.Clear;  
  86.   Memo1.Lines.Add(name);  
  87.   Memo1.Lines.Add(IntToStr(age));  
  88.   Memo1.Lines.Add(DateToStr(birthday));  
  89.   
  90.   CloseFile(F);  
  91. end;  
  92.   
  93.    

 

4. 结构化文件存取

AssignFile: 关联
Rewrite: 创建并打开一个新文件, 如已存在则覆盖
Reset: 打开已存在的文件; 追加也要用它先打开, 然后再移动指针; Append 是文本文件专用的
CloseFile: 关闭

FileSize: 记录数
FilePos: 返回文件的当前位置
Seek: 把文件指针移到指定位置(只用于结构化文件)
Eof: 文件尾

Read: 读
Write: 写

另外: 包含长字符串、变量、类实例、接口或动态数组的记录不能写入类型文件中!

 

[delphi]  view plain  copy
  1. type  
  2.   TPersonrec = packed record  
  3.     name: string[12];  
  4.     age: Word;  
  5.     birthday: TDate;  
  6.   end//先定义一个结构  
  7.   
  8.   var  
  9.     DataFile: file of TPersonRec;  //声明 DataFile 用来读写 TPersonRec 结构数据   
  10.   
  11.     PersonRec: TPersonRec;  //声明结构变量     
  12.   
  13.      FeName: string = 'D:\Delphi Study N\15.Delphi File\b.dat';  //文件名  
  14.   
  15. //write .dat  
  16. procedure TMainForm.Button13Click(Sender: TObject);  
  17. begin  
  18.   AssignFile(DataFile,FeName);  
  19.   Rewrite(DataFile);  //建立文件, 如果存在就覆盖  
  20.   
  21.   PersonRec.name := 'lailai';  
  22.   PersonRec.age := 25;  
  23.   PersonRec.birthday := StrToDate('1988/11/16');  
  24.   
  25.   write(datafile,personrec);  
  26.   
  27.   CloseFile(DataFile);  
  28.   
  29.   ShellExecute(0,'Open',PAnsiChar(FeName),nil,nil,SW_SHOW);  
  30. end;  
  31.   
  32. //Add dat  
  33. procedure TMainForm.Button14Click(Sender: TObject);  
  34. begin  
  35.   AssignFile(DataFile,FeName);  
  36.   Reset(DataFile);  //Append 只对文本文件  
  37.   
  38.   Seek(DataFile,FileSize(DataFile)); //移到文件尾, 这里的 FileSize 表示有多少条记录  
  39.   
  40.   PersonRec.name := 'ailaio';  
  41.   PersonRec.age := 7;  
  42.   PersonRec.birthday := StrToDate('2006/12/19');  
  43.   Write(DataFile,PersonRec);  
  44.   
  45.   CloseFile(DataFile);  
  46. end;  
  47.   
  48. //修改 Alter dat  
  49. procedure TMainForm.Button15Click(Sender: TObject);  
  50. begin  
  51.   AssignFile(DataFile,FeName);  
  52.   Reset(DataFile);  
  53.   
  54.   Seek(DataFile,1); //指针移到第2条  
  55.   read(datafile,personrec);  
  56.   PersonRec.age := 0;  
  57.   PersonRec.birthday := StrToDate('2013/1/2');  
  58.   
  59.   Seek(DataFile,3);  
  60.   write(datafile,personrec);  
  61.     
  62.   CloseFile(DataFile);  
  63. end;  
  64.   
  65.   
  66.    

5. WinAPI: WritePrivateProfileString、GetPrivateProfileString - 简单读写 Ini 文件

    WritePrivateProfileString('段1','Key1','值1', PChar(FilePath));

   GetPrivateProfileString('段1','Key2','默认值', buf, Length(buf), PChar(FilePath));

 

6.复杂的结构化存取

有些文档不是结构化的, 譬如记事本文件; 结构化的档可以分为以下几类:
标准结构化文档、自定义结构化文档(譬如 bmp 文件)和复合文档.

这里要谈到的结构化储存(复合文档)是由 Windows 系统通过 COM 提供的, 它能完成像 Windows 目录结构一样复杂的文件结构的存取; 提示一下 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;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值