资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,*,*,化学工业出版社,第11章 文件管理,11.1文件管理组件,11.1.1TFileListBox组件,11.1.2TDirectoryListBox组件,11.1.3 DriveCombobox组件,11.1.4 FilterCombobox组件,11.1.5 ShellTreeView组件,11.1.6 ShellCombobox组件,11.1.7 ShellListView组件,11.2 文件管理的相关函数和过程,11.2.1 RenameFile函数,11.2.2 DeleteFile函数,11.2.3 FileExists函数,目录,11.2.4 FileGetAttr函数,11.2.5 FileSetAttr函数,11.2.6 DirectoryExists函数,11.2.7 CreateDir函数,11.2.8 RemoveDir函数,11.3 文件管理操作,11.3.1 文件类型,11.3.2 适合于各种文件的操作,11.3.3 文本文件的操作,11.3.4 有类型文件的操作,11.4 小结,11.5 习题,目录,文件是同一类型元素的有序集合,是内存与外设间传输数据的渠道。一些外设如显示器、键盘、打印机等都可以看作文件,但最常用的还是磁盘文件,这也是本章我们主要讨论的对象。,Delphi,继承了,Object Pascal,的文件管理功能,并有很大的发展,其中最主要的是提供了用于文件管理的标准组件,同时也提供了更多的文件管理函数。本章首先介绍,Delphi,提供的文件组件的使用方法,然后是,Delphi,文件管理的标准过程,/,函数,最后介绍文件访问具体操作。,11.1,文件管理组件,Delphi,提供了丰富的文件管理组件,主要有两种风格。一种为位于,Delphi,组件面板,Tool Palette,的,Win3.1,选项卡上的,TFileListBox,、,TDirectoryListBox,、,TDriveCombobox,、,TFilterCombobox,四个组件,为传统的,Windows 3.x,风格;另一种为位于,Sample,选项卡上的,TShellListView,、,TShellCombobox,、,TShellTreeView,三个组件,为,Windows 9X,风格。使用它们可以很方便的编写类似,Windows,资源管理器程序。,11.1.1 FileListBox,组件,该组件的功能是在应用程序窗体上提供一个文件列表框,显示指定目录下的文件列表。,它和其他它三个组件联合使用,可以为用户提供磁盘上所有文件查看和选择功能。,FileListBox,类和,ListBox,类都是由,CustomListBox,类派生而来,因此它们用法有很多相同之处,这里只介绍它独有的属性。,1,Directory,属性:,该属性用来指定包含,TFileListBox,组件内所显示文件的文件夹名。改变该属性的文件夹名,则文件列表框中将显示此文件夹所包含的文件。,2,Drive,属性:,该属性用来指定包含,TFileListBox,组件内所显示文件的驱动器名。改变该属性的驱动器名,,TFileListBox,组件的,Directory,属性自动改为此驱动器下的当前目录。,3,FileEdit,属性:,该属性指定一个与文件列表框组件关联的,Edit,组件。当用户在文件列表框组件中选择文件时,被选择文件的文件名(,FileName,属性值)将显示在,Edit,组件中;如果当前没有文件被选取,则该,Edit,组件中将显示当前的,Mask,属性值(,Mask,属性的作用后面将有详细介绍),就像标准的,Windows,中的打开和保存对话框中的功能。,用户对,Edit,组件的,Text,属性所做的直接修改不会影响到文件列表框组件,但可以通过调用,ApplyFilePath,方法用修改后的,Text,属性值更新文件列表框组件的当前设置。,4,FileName,属性:,该属性返回文件列表框中用户选择的文件名,包含路径信息。,可以通过设置该属性把文件列表框初始化为选中某个特定文件;读取该属性则可以获取用户选择的文件名。如果文件列表框关联了,Edit,(即设置了,FileEdit,属性),,FileName,属性值将显示在该组件中。,5,FileType,属性:,该属性指定将在文件列表框中显示名称的文件的属性。该属性定义如下:,property FileType:TFileType;,且有如下类型定义:,type,TFileAttr=(ftReadOnly,ftHidden,ftSystem,ftVolumeID,ftDirectory,ftArchive,ftNormal);,TFileType=set of TFileAttr;,其中文件类型的可选值及其意义如表,11-1,:,表,11-1,文件类型可选值及意义,值,意 义,ftReadOnly,文件列表框中显示只读类型的文件,ftHidden,文件列表框中显示隐藏类型的文件,ftSystem,文件列表框中显示系统类型的文件,ftVolumeID,未用,ftDirectory,文件列表框中显示目录,ftArchive,文件列表框中显示存档类型的文件,ftNormal,文件列表框中显示普通的文件,6,Mask,属性:,该属性用来设置文件列表框中将显示文件的过滤条件。如果设置该属性,则指定文件夹下只有满足该过滤条件的文件名才会在文件列表框中显示。其值是含有文件通配符的文件名。其中“*”表示任意字符串,而“,?”,表示任意一个字符。例如“*,.*”,表示所有文件,也是该属性的默认值。,7,ShowGlyphs,属性:,该属性为,Boolean,类型,当值为,True,时,表示在文件列表框显示的文件名旁同时显示表示其类型的文件图标;当值为,False,时,则只显示文件名而不显示该图标。,11.1.2 DirectoryListBox,组件,该组件的功能是在应用程序窗体上提供一个目录列表框,显示指定驱动器下的目录树结构。该类同样由,TCustomListBox,类派生而来,这里只介绍其独有属性。,1,CaseSensitive,属性:,该属性为,Boolean,类型,用来指定文件系统对于文件名的大小写是否敏感。取值,True,是为大小写敏感,,False,则不区分大小写。,2,Directory,属性:,该属性用来返回目录列表框中打开的当前目录名。,3,DirLabel,属性:,该属性指定一个与目录列表框组件关联的,abel,组件。当用户在目录列表框组件中选择目录,被选择目录的目录名(,Dierctory,属性值)将作为该,Label,组件的标题显示。,4,Drive,属性:,该属性指定目录列表框所显示的目录树结构属于哪一个驱动器。如果该值发生改变,则目录列表框将显示指定驱动器的目录树,且自动打开指定驱动器下的当前目录。,5FileList属性:,该属性用来指定一个与目录列表框相关联的文件列表框组件,以显示目录列表框中所选当前目录下的文件。,一旦文件列表框与目录列表框建立起关联,则文件列表框的Directory属性值、Dirve属性值将会随着目录列表框的相关属性值的改变而自动改变。即,当目录列表框中的当前目录发生改变时,文件列表框会自动显示修改后的当前目录下的文件。,11.1.3 DriveCombobox,组件,该组件功能是在应用程序窗体上提供一个驱动器组合列表框,供用户选择驱动器。,因,TDriveCombobox,类和,TCombobox,类都是由,TCustomCombobox,类派生而来,所以它们用法有很多相同之处,这里只介绍,TDriveCombobox,独有的几个属性。,1,DirList,属性:,该属性用来指定一个与驱动器组合列表框相关联的目录列表框,以显示指定驱动器下的目录树结构。关联建立后,当驱动器组合列表框中所选驱动器发生改变,则关联的目录列表框的,Drive,属,性、,Directory,会自动改变,即自动显示所选驱动器下的目录树结构,自动打开指定驱动器下的当前目录。,2,Drive,属性:,返回用户选择的驱动器名。在设计期指定该值可以将,TDriveCombobox,初始化为指向某个特定的驱动器。,3,TextCase,属性:,该属性指定列表框中显示驱动器名的字母是大写还是小写。,11.1.4 FilterCombobox,组件,该组件的功能是提供给用户一个选择文件过滤属性的选择框。主要属性如下:,1,FileList,属性:,该属性用来指定一个与过滤属性选择框关联的文件列表框组件,以限制该文件列表框显示文件的类型。一旦建立关联,文件列表框中所显示文件将随过滤属性的改变而自动变化。,2,Filter,属性:,该属性用于设置和保存用户设置的文件过滤条件列表。该列表可以在设计期用,FilterEditer,编辑,,也可以在运行时通过代码来设置。其格式如下例:,FilterComboBox1.Filter:=Text files|*.TXT,;,FilterComboBox1.Filter:=Text files(*.TXT)|*.TXT|Pascal files(*.PAS)|*.PAS,;,FilterComboBox1.Filter:=All files|*.TXT;*.PAS;*.WB1,;,3,Mask,属性:,该属性返回用户当前所选择的过滤条件。如果关联了文件列表框组件,则文件列表框的,ask,属性值会随该属性值的变化自动变化。,例,11-1,磁盘文件浏览器,利用上述几个组件,可以很方便的制作一个,Win3.1,风格的磁盘文件浏览器。步骤如下:,1,新建一个,VCL Forms Application-Delphi for Win32,工程,在,Tool Palette,的,win3.1,页上找到以上几个组件添加到窗体上,就用默认名字。,2,修改,DriveCombobox1,的,DirList,属性为,DirectoryListBox1,。,3,修改,DirectoryListBox1,的,FileList,属性为,FileListBox1,。,4,修改,FilterCombobox1,的,FileList,属性为,FileListBox1,,并修改其,Filter,属性,指定文件过滤条件。,5,运行,程序运行界面如图,11-1,:,图11-1 磁盘文件浏览器界面,11.1.5 ShellTreeView,组件,ShellTreeView,组件显示一个,Windows,资源管理器样式的文件夹树状列表,使用它可以很方便的制作和,Windows,资源管理器一模一样的文件夹树状浏览程序。因该组件由,CustomTreeView,派生而来,这里只介绍其主要属性。,1.AutoContextMenus,属性:,该属性是,Boolean,类型,用来指定,TShellTreeView,组件是否根据右键单击的对象自动显示系统菜单。默认值为,True,,表示当右键单击组件内显示的某个对象时,组件会根据该象的类型显示相应的系统菜单。,2.AutoRefresh,属性:,该属性是,Boolean,类型,用来指定,ShellTreeView,组件是否根据系统资源改动情况自动更新显示。默认值是,False,。,3.ObjectTypes,属性:,该属性是一个集合属性,用来指定,ShellTreeView,组件中显示的系统资源类型。类型定义如下:,FObjectTypes:TShellObjectTypes;,TShellObjectTypes=set of TShellObjectType;,TShellObjectType=(otFolders,otNonFolders,otHidden);,其中otFolders表示文件夹对象,otNonFolders表示非文件对象,otHidden表示具有隐藏属性的对象。下面图11-2和图11-3就是该属性值别取otFolders和otFolders,otNonFolders时的情况:,图11-2,图11-3,4.Root,属性:,该属性指定一个文件夹作为,TShellTreeView,组件的根结点,该文件夹可以是一个系统文件夹,也可是用户指定任一磁盘路径。默认值为,rfDesktop,即将“桌面”作为根结点,如上图所示。,5.ShowButtons,、,ShowShellImages,、,ShowLines,属性,:,这三个属性都是,Boolean,类型,分别用来指定,TShellTreeView,组件是否显示对象树中的展开或收缩按钮、系统图标、连接虚线。默认值都为,True,,表示显示这些元素,如上图。,6.ShellCombobox,、,ShellListView,属性,:,这两个属性分别用来指定和,TShellTreeView,组件相关联的,TShellCombobox,组件和,TShellListView,组件。设置过该属性后,当,TShellTreeView,组件中选中的对象发生变化时,与之关联的,TShellCombobox,组件和,TShellListView,组件中的显示内容会自动更新。,11.1.6 ShellCombobox,组件,TShellCombobox,组件用来显示一个,Windows,资源管理器样式的对象下拉列表框,如下图,11-4,:,图11-4 ShellCombobox组件,该组件的重要属性主要有三个,Root,、,ShellListView,、,ShellTreeView,,用法与,TShellTreeView,类似,这里不再重复。,11.1.7 ShellListView,组件,TShellListView,组件用来显示一个,Windows,资源管理器样式的对象列表框,如图,11-5,。下面介绍它的重要属性。,图11-5 ShellListView组件,1.AutoContextMenus,、,AutoRefresh,、,Root,、,ObjectTypes,、,ShellCombobox,、,ShellTreeView,:,这些属性的功能与用法类似,TShellTreeView,、,TShellCombobox,组件,这里不再重复。,2.ViewStyle:,该属性是枚举类型,用来指定,TShellListView,组件显示对象信息的方式。相关定义如下:,FViewStyle:TViewStyle;,TViewStyle=(vsIcon,vsSmallIcon,vsList,vsReport);,四个取值分别表示以大图标、小图标、列表、详 细信息方式显示对象信息,类似Windows资源管 理器中的“查看”选项。,3.ShowColumnHeaders:,该属性为Boolean类型,只有在ViewStyle属性值为vsReport时才有效,用来指定是否显示详细信息的列标题。默认值为True,表示显示详细信息的列标题。,4.ColumnClick:,该属性为,Boolean,类型,只有在,ViewStyle,属性值为,vsReport,且,ShowColumn,属性为,True,时才有效,用来指定是否充许单击详细信息的列标题。默认值为,True,,表示可以单击详细信息的列标题。,5.GridLines:,该属性为,Boolean,类型,只有在,ViewStyle,属性值为,vsReport,时才有效,用来指定是否显示详细信息列表的网格线。默认值为,False,,表示不显示详细信息列表的网络线。,6.RowSelect:,该属性为,Boolean,类型,只有在,ViewStyle,属性值为,vsReport,时才有效,用来指定当鼠标单击列表中某个对象时,是否整行选中该对象的详细信息,(,高亮显示,),。默认值为,False,,表示当鼠标单击列表中某个对象时,只选中该对象本身。,7.HotTrack:,该属性为,Boolean,类型,用来指定是否自动选中,(,高亮显示,此时可敲击回车键打开该对象,),组件中当前鼠标位置处的对象。默认值为,False,,表示不自动选中当前鼠标位置处的对象。,8.MultiSelect:,该属性为,Boolean,类型,用来指定是否充许同时选中对象列表中的多个对象。默认值为,False,,表示不自动选中当前鼠标位置处的对象。如果为,True,,则可以支持扩展选择功能实现对象多选。,9.Sorted:,该属性为,Boolean,类型,用来指定是否对列表中的对象按名称排序。默认值为,True,。,例,11-2“,我的资源管理器”示例程序,利用上述几个组件,可以很方便的制作一个,Win9X,风格的磁盘文件浏览器。步骤如下,:,1.新建一个VCL Forms Application-Delphi for Win32工程,在Tool Palette的Sample页上找到以上几个组件添加到窗体上,就用默认名字。,2.修改ShellTreeView组件的ShellCombobox属性指向添加的TShellCombobox组件,TShellListView属性指向添加的TShellListView组件;修改TShellCombobox组件的ShellListView属性指向添加的TShellListView组件。,3.其它属性根据需要设置。,4.添加五个按钮,分别修改其标Caption属性为“向上”、“新建”、“删除”、“转到”、“改名”,如下图程序界面。,5.,为,TShellListView,组件添加右键弹出菜单,菜单项如下图所示。,6.,编写相应的码,调试运行。,程序运行界面如图,11-6,:,图11-6 自制资源管理程序界面,源代码:,var,i:integer=1;/,自定义全局变量,/,自定义删除文件夹的函数,function TForm1.Deltree(path:string):Boolean;,var SearchRec:TSearchRec;,olddir:string;,begin,if DirectoryExists(path)then,begin,oldDir:=GetCurrentDir;,ChDir(path);,FindFirst(.,faAnyFile,SearchRec);,repeat,FileSetAttr(SearchRec.Name,0);,if(SearchRec.Attr and faDirectory 0)then,begin,if(SearchRec.Name1.)then,if(not Deltree(SearchRec.Name)then break;,end,else,if(not DeleteFile(SearchRec.Name)then,break;,until(FindNext(SearchRec)0);,ChDir(.);,Result:=ReMoveDir(path);,SetCurrentDir(oldDir);,end,else,Result:=False;,end;,/“,向上”功能实现,procedure TForm1.SpeedButton1Click(Sender:TObject);,begin,shelllistview1.Back;,end;,/“,新建”文件夹功能,procedure TForm1.SpeedButton2Click(Sender:TObject);,var s:string;,begin,s:=shellcombobox1.Path+,新建文件夹,+inttostr(i);,if directoryexists(s)then,begin,i:=i+1;,s:=shellcombobox1.Path+,新建文件夹,+inttostr(i);,end;,mkdir(s);,i:=i+1;,end;,/“,删除”功能实现,procedure TForm1.SpeedButton3Click(Sender:TObject);,var s:string;,begin,s:=shelllistview1.Foldersshelllistview1.Selected.index.PathName;,if(filegetattr(s)and fadirectory)=fadirectory then,try,rmdir(shelllistview1.Foldersshelllistview1.Selected.index.PathName);,except,showmessage(删除目录失败!请确认目录是否非空!);,exit;,end,else,try,deletefile(s);,except,showmessage(,删除文件失败,!,访问被拒绝,!);,exit;,end;,shelllistview1.Update;,end;,/“,转到”功能实现,procedure TForm1.SpeedButton4Click(Sender:TObject);,var s:string;,begin,if selectdirectory(,请选择要转到的文件夹,rfdesktop,s)then,if directoryexists(s)then shelltreeview1.Path:=s;,end;,/“,重命名”功能实现,procedure TForm1.SpeedButton5Click(Sender:TObject);,begin,if shelllistview1.SelCount=1 then,shelllistview1.SelectedFolder.Rename(inputbox(,重命名,请输入新文件名:,shelllistview1.Foldersshelllistview1.Selected.index.DisplayName);,end;,/“,图标”查看方式,procedure TForm1.N2Click(Sender:TObject);,begin,shelllistview1.ViewStyle:=vsicon;,end;,/“,小图标”查看方式,procedure TForm1.N3Click(Sender:TObject);,begin,shelllistview1.ViewStyle:=vssmallicon;,end;,/“,列表”查看方式,procedure TForm1.N4Click(Sender:TObject);,begin,shelllistview1.ViewStyle:=vslist;,end;,/“,详细信息”查看方式,procedure TForm1.N5Click(Sender:TObject);,begin,shelllistview1.ViewStyle:=vsreport;,end;,11.2,文件管理的相关函数和过程,Delphi中除了每上节中介绍的那些用于文件和目录管理的组件外,还提供了很多用于文件和目录操作的标准函数或过程。熟练掌握并灵活使用这些标准过程,可以很方便的编写磁盘文件管理类的应用。本节介绍几个封装在SysUtils单元中的常用标准过程,有了这些作为基础,更多的标准过程的用法请读者根据其名称及参数自己尝试。,11.2.1 RenameFile,函数,函数定义:,function RenameFile(const OldName,NewName:string):Boolean;,函数的功能是将文件改名。要改名文件的文件名由字符串常量参数,OldName,给出,而更改后的新文件名由字符串常量参数,NewName,指出。返回值为,Boolean,类型,表示改名操作是否完成。当改名操作成功时,返回值为,False,;如果操作失败(如程序没有修改文件的权限),则返回值为,False,。,需要注意的是,如果,NewName,参数指定的新文件名与已经存在的文件名冲突,则该函数在,Windows,系统和,Linux,系统下执行的操作不同:在,Windows,系统下,改名操作失败;在,Linux,系统下,该函数会覆盖已存在的文件。,11.2.2 DeleteFile,函数,函数定义:,function DeleteFile(const FileName:string):Boolean;,函数功能是从磁盘上删除由字符串常量参数,FileName,指定文件名的文件。返回值为,Boolean,类型,表示删除操作是否完成。如果删除成功,则返回,True;,如果文件不能删除或指定的文件不存在,则返回,False,。,11.2.3 FileExists,函数,函数定义:,function FileExists(const FileName:string):Boolean;,该函数功能是判断由字符串常量参数,FileName,指定文件名的文件是否存在,返回值是,Boolean,类型。如果指定文件存在,则返回,True,,否则返回,False,。,11.2.4 FileGetAttr,函数,函数定义:,function FileGetAttr(const FileName:string):Integer;,该函数功能是获取由字符串常量参数,FileName,指定名称的文件的文件属性,返回值是整型。该函数只能使用在,Windows,平台。关于文件属性的描述,,Delphi,用一个,32,位二进制数最低,8,位的取值来表示。每一位表示一种属性,如果该位,值为,1,,则表示具有该属性,为,0,则表示不具有该属性。高,24,位全部为,0,。为了使用方便,,Delphi,在,SysUtils,单元还定义了几个相应的常量值,如下:,File attribute constants,/,此部分代码摘自,Delphi,源码,SysUtils,单元的定义,faReadOnly=$00000001 platform;,faHidden=$00000002 platform;,faSysFile=$00000004 platform;,faVolumeID=$00000008 platform;,faDirectory=$00000010;,faArchive=$00000020 platform;,faSymLink=$00000040 platform;,faAnyFile=$0000003F;,因此,函数,FileGetAttr,的返回值为,Integer,类型。通过该返回值,对照上述定义,就可以很方便的得到文件具有的属性。例如返回值为,3,则文件具有只读和隐藏属性,如果返回值为,6,,则具有隐藏和系统属性。示例见例,11-3,11.2.5 FileSetAttr,函数,函数定义:,function FileSetAttr(const FileName:string;Attr:Integer):Integer;,该函数功能是设置由字符串常量参数,FileName,指定名称的文件的文件属性,新的文件属性由参数,Attr,给出。返回值是整型。该函数只能使用在,Windows,平台。,例,11-3,查看文件属性的程序,程序功能类似于,Windows,资源管理器中文件对象的右键菜单中的“属性”菜单项,在文件列表框中单击选中某个文件,下面的文件属性组合框中,该文件所具有的属性相对应的复选框即处于选中状态。如果想修改文件属性,只需要修改相应的复选框的选中状态既可。程序运行界面如图,11-7,:,图11-7 文件属性查看程序运行效果图,源代码如下:,var,fileatt,newatt:word;,/,全局变量,分别用来保存原来的文件属性,和要修改的文件属性,/,在文件列表框中,单击选中某个文件后,获取并显示该文件属性:,procedure TForm1.FileListClick(Sender:TObject);,begin,readonlybox.Enabled:=true;,systembox.Enabled:=true;,hiddenbox.Enabled:=true;,arrchbox.Enabled:=true;,fileatt:=filegetattr(filelist.FileName);,readonlybox.Checked:=(fileatt and fareadonly)=fareadonly;,systembox.Checked:=(fileatt and fasysfile)=fasysfile;,hiddenbox.Checked:=(fileatt and fahidden)=fahidden;,arrchbox.Checked:=(fileatt and faarchive)=faarchive;,end;,/,加上或去掉只读属性,procedure TForm1.readonlyboxClick(Sender:TObject);,begin,newatt:=filegetattr(filelist.FileName);,if readonlybox.Checked then newatt:=newatt or fareadonly,else newatt:=newatt and not fareadonly;,filesetattr(filelist.FileName,newatt);,end;,/,加上或去掉隐藏属性,procedure TForm1.hiddenboxClick(Sender:TObject);,begin,newatt:=filegetattr(filelist.FileName);,if hiddenbox.Checked then newatt:=newatt or fahidden,else newatt:=newatt and not fahidden;,filesetattr(filelist.FileName,newatt);,end;,/,加上或去掉系统属性,procedure TForm1.systemboxClick(Sender:TObject);,begin,newatt:=filegetattr(filelist.FileName);,if systembox.Checked then newatt:=newatt or fasysfile,else newatt:=newatt and not fasysfile;,filesetattr(filelist.FileName,newatt);,end;,/,加上或去掉存档属性,procedure TForm1.arrchboxClick(Sender:TObject);,begin,newatt:=filegetattr(filelist.FileName);,if arrchbox.Checked then newatt:=newatt or faarchive,else newatt:=newatt and not faarchive;,filesetattr(filelist.FileName,newatt);,end;,11.2.6 DirectoryExists,函数,函数定义:,function DirectoryExists(const Directory:string):Boolean;,该函数的功能是判断由字符串常量参数,Directory,指定名称的文件夹是否存在,返回值是,Boolean,类型。如果指定文件夹存在,则返回,True,,否则返回,False,。,如果指定的目录名是绝对路径,则该函数沿着参数指定的路径搜索指定的文件夹,否则该函数只在当前目录下搜索指定文件夹。,注意:在仅限,Windows,系统下使用的,FileCtrl,单元中也包含有一个,DirectoryExists,函数,但是即使代码不需要跨平台使用,也不提倡使用该函数。,11.2.7 CreateDir,函数,函数定义:,function CreateDir(const Dir:string):Boolean;,该函数用来创建一个由字符串常量参数,Dir,指定名称的目录,返回值为,Boolean,类型。如果创建成功则返回,True,,否则返回,Fales,。,11.2.8 RemoveDir,函数,函数定义:,function RemoveDir(const Dir:string):Boolean;,该函数用来删除一个由字符串常量参数,Dir,指定名称的空目录,返回值为,Boolean,类型。如果成功删除则返回,True,,否则返回,Fales,。,注意:只有目录存在且是空目录才能用该方法删除。,11.3,文件管理操作,11.3.1,文件类型,Delphi,根据文件内数据元素的不同,将文件分为三种类型,即文本文件、类型文件和无类型文件。,1,文本文件,Delphi,中的文本文件是指由,ASCII,字符组成,按行存储的文件,以回车符(通常还会有一个换行符)作为一行结束的标志。该类型文件变量声明方式如下:,var,TextFileVar:TextFile;,文本文件是以行为单位进行读、写操作的。由于每一行长度不一定相同,不能计算出给定行在文件中的确切位置,因而只能顺序地读写。而且文本文件只能单独以读或写的方式打开,在一个打开的文本文件上同时进行读、写操作是不允许的。,2,类型文件,类型文件是指文件中的数据无素属于固定长度的数据类型,该数据类型即文件的类型。因此,文件类型不能是动态数据类型,比如长字符串、类、对象、指针、变量、其他文件以及包含有这些类型的构造类型。例如:,type,PhoneEntry=record,FirstName,LastName:string20;,PhoneNumber:string15;,Listed:Boolean;,end;,PhoneList=file of PhoneEntry;,上面代码中先定义一个名为,PhoneEntry,的记录类型,然后定义一个基于这种记录类型的文件类型,PhoneList,,用于定义存储多条电话记录的文件。也可以直接用,file of,结构进行变量定义,如:,var List1:file of PhoneEntry;,3,无类型文件,无类型文件提供一个底层的,I/O,通道,主要用于对磁盘文件的直接访问,不需要理会文件的类型和结构。无类型文件只接用,file,关键词来声明即可,例如:,var DataFile:file;,对于无类型文件来说,,Reset,和,Write,过程可以用一个额外的参数在数据传送时数据块的大小。基于历史的原因,块的大小默认为,128,字节。当该值为,1,时,才能准确的反映文件夹的大小,因为毕竟不是所有的文件长度都是,128,字节的整数倍。,除了,Reset,和,Write,过程外,所有适合类型文件操作的标淮过程同样适用于无类型文件的操作。但是在高速数据传输时,可以用,BlockRead,和,BlockWrite,过程来替代,Read,和,Write,过程。关于这个两个过程的用法,请参阅联机帮助。,11.3.2,适合于各种文件的操作,1.,文件的打开与关闭,AssignFile,:将一个外部文件名和一个文件变量建立关联,过程声明:,procedure AssignFile(var F;FileName:string);,其中,变量参数,F,为一任意类型的文件变量名,而常量字符串参数,FileName,则指定一个将要于文件变量,F,建立关联的外部文件名。该过程调用成功后,直至关闭,对于文件变量,F,的所有操作都将应用于,FileName,所指定的文件。如果,FileName,参数为空,则文件变量,F,将和标准的输入或输出文件建立关联,具体要看调用该过程之后调用的是,Reset,过程还是,ReWrite,过程。,注意,不要对已经打开了的文件变量使用该操作。,Reset,:打开一个存在的文件,
展开阅读全文