知识大全 文件管理(三)[3]
Posted 目录
篇首语:星星使天空绚烂夺目,知识人们增长才干。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 文件管理(三)[3]相关的知识,希望对你有一定的参考价值。
DELPHI基础教程:文件管理(三)[3] 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
没有办法我只能再次使用FindFirst 这个函数的特性在 节中已进行了介绍 下面是这一功能的实现代码
procedure TFMForm search Click(Sender: TObject)
var
SearchForm: TSearchForm;
FileAttrForm: TFileAttrForm;
FindIt path: String;
SearchRec: TSearchRec;
Return: Integer;
begin
SearchForm := TSearchForm Create(self)
with SearchForm do
begin
SearchFile text := ;
SearchPath text := DirectoryOutline Directory;
if (ShowModal <> idCancel) and
(SearchFile Text <> ) and (SearchPath text <> ) then
begin
FindIt := SearchPath text+ \\ +SearchFile text;
Return := FindFirst(FindIt faAnyFile SearchRec)
if Return <> then
FindIt :=
else
FindIt := ExpandFileName(SearchRec Name)
end;
if FindIt = then
MessageDlg( Cannot find the file in current directory
mtWarning [mbOk] )
else
begin
Path := ExtractFilePath(FindIt)
FindIt := ExtractFileName(FindIt)
FileAttrForm := TFileAttrForm Create(self)
ShowFileAttr(FileAttrForm FindIt Path)
end;
end;
end;
显示磁盘信息
当用户单击Disk View菜单项时 将弹出一个TDiskViewForm类型的对话框 用来显示当前磁盘的信息
磁盘信息的获取是在DiskViewForm中DriveEdit编辑框的OnChange事件处理过程中实现的
procedure TDiskViewForm driveEditChange(Sender: TObject)
var
dr: Byte;
Free Total: LongInt;
begin
Free := DiskFree( )
Total := DiskSize( )
FreeSpace text := IntToStr(Free)+ bytes ;
TotalSpace text := IntToStr(Total) + bytes ;
end;
DiskFree DiskSize带参数为 表示当前驱动器 读者可以很容易把它改成按用户输入显示磁盘信息的情况
DiskViewForm中的三个编辑框设计时都令ReadOnly为True
改变显示文件的类型
改变显示文件的类型事实上是设置FileList的Mask属性 我们利用一个标准的InputBox输入文件的匹配字符串 而后利用Update方法更新FileList
procedure TFMForm Viewtype Click(Sender: TObject)
var
FileMask: String;
begin
FileMask := InputBox( File type Input File type For View : FileList Mask)
If FileMask = then FileMask := * * ;
FileList Mask := FileMask;
FileList Update;
CreateCaption;
end;
其中的CreateCaption私有过程将在( )中进行介绍
目录管理功能的实现
在子窗口的Directory菜单中 提供了目录管理功能
● Create Directory :创建一个子目录
● Delete Directory :删除一个空的子目录
● Change Directory :改变当前目录
创建目录
创建目录时首先弹出一个TNewDir类型的对话框
对话框中要求用户输入目录名 如果用户不输入路径 则缺省认定为当前目录的子目录
Dir := ExpandFileName(DirName Text)
而后调用MkDir函数 在目录创建过程中关闭了I/O错误检测 出错不产生异常而是把IOResult设置为非零值 通过检查IOResult是否为 可以确定创建是否成功
程序清单如下
procedure TFMForm CreateDirectory Click(Sender: TObject)
var
NewDir: TNewDir;
Dir: String;
begin
$I
NewDir := TNewDir Create(self)
with NewDir do
begin
CurrentDir Caption := DirectoryOutline Directory;
if (ShowModal <> idCancel) and (DirName Text <> ) then
Dir := ExpandFileName(DirName text)
end;
MkDir(Dir)
if IOResult <> then
MessageDlg( Cannot Create directory mtWarning [mbOk] )
end;
但不幸的是目录创建后我们却无法从当前目录树中看到 必须移到另一个驱动器而后再返回 创建的目录才是可见的 在后边我们将提供一种解决方法
删除目录
在实现目录删除过程中 远不如创建目录那么顺利 碰到的问题是
RmDir不允许删除当前目录 但为了操作方便 我们要求删除的恰恰是当前目录
目录删除后调用Refresh方法或Update方法并不能使该目录从屏幕显示中去除 因而当用户试图进入该目录时会导致系统崩溃
对第一个问题 我们的解决办法是把当前目录转换到其父目录 假如读者记得目录也被操作系统作为一种特殊的文件对待的话 那么就不会对下面的语句感到奇怪了
path := DirectoryOutline Directory;
Directoryoutlin Directory := ExpandFilePath(Path)
而后调用RmDir过程
RmDir(Path)
第二个问题的解决却颇为费神 因为DirectoryOutline是Delphi提供的示例部件 没有Help文件支持 通过试验发现 只有当DirectoryOutline的Drive属性改变时 才重新从相应驱动器读取目录 而且它基本上是只读的 除非清除( Clear) 它 象Add Delete这些方法对它都是无效的
我曾经考虑过一个笨拙的方法 那就是先改变当前驱动器而后再改回来 但这种方法一方面速度无法忍受 另一方面当只存在一个驱动器可用时会导致系统崩溃
正当我一筹莫展时 突然想到 DirectoryOutline是一个Sample部件 Delphi 提供了它的源代码 而当我分析了它的源代码后 我知道应该做什么了 那就是为DirectoryOutline增添一个Reset方法!
为部件增添一个方法
严格地说 我们所做的工作属于创建一个新部件 但因为我们有源代码 所以不必从DirectoryOutline继承而是直接修改它 这样我们可以省去与创建部件有关的许多繁琐工作 对创建新部件感兴趣的读者可阅读本书第三编的有关章节
在Delphi IDE中打开DirectoryOutline的源文件后
把库单元名改为DirPlus 类名改为TDirectoryOutlinePlus 表明这是DirectoryOutline的增强版 而后存入另一个目录中
添加一个公有方法Reset 这一方法的作用是重新读取当前驱动器的目录 程序清单如下
procedure TDirectoryOutlinePlus Reset;
begin
ChDir(FDrive + : )
GetDir( FDirectory)
FDirectory := ForceCase(FDirectory)
if not (csLoading in ComponentState) then BuildTree;
end;
读者也许被这段代码弄糊涂了 由于篇幅所限 而且涉及到许多自定义部件开发的内容 我们也不准备去详细解释它 假如读者想彻底搞懂它 我建议先看一下本书第三编有关自定义部件开发的内容 而后再对照原DirectoryOutline的源代码进行分析
编译成一个库文件DirPlus tpu;
把DirPlus加入部件的Samples页中
如何添加一个部件见第三编有关章节的介绍
当增强的目录树准备好以后 必须修改我们的子窗口设计 但却不必亲自修改源代码
删除子窗口中的TDirectoryOutline类部件DirectoryOutline 此时FileList占据了整个客户区
把FileList的Align属改为None 并留出左边的空白供放部件用
在窗口左部加入TDirectoryOutlinPlus类的部件DirectoryOutline;
把DirectoryOutline的Align属性改为Left FileList的Align属性还原为Client;
在DirectoryOutline的事件OnChange列表中选取DirectoryOutlineChange 即原DirectoryOutline的处理过程
以上工作的最终目标是实现目录创建 删除后屏幕的正确显示 这只需要调用DirectoryOutline的Reset方法即可
cha138/Article/program/Delphi/201311/25234相关参考
DELPHI基础教程:文件管理(三)[2] 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 一致的
DELPHI基础教程:文件管理(三)[1] 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 画出每
DELPHI基础教程:文件管理(一)[3] 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 记录文
DELPHI基础教程:文件管理(二)[3] 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 函数N
操作系统的文件系统由哪五部分组成的文件系统由三部分组成:1、文件系统的接口,对对象操纵和管理的软件集合;2、对象;3、属性。文件系统介绍:文件系统是操作系统用于明确存储设备(常见的是磁盘,也有基于NA
下列选项属于我国农村干部管理考核和激励机制“一定三有”的是_____。A、定权责立规范B、收入有保障C、干好有希望D、退后有所养答案:ABCD解析:中央一号文件指出:加强农村基层党组织带头人队伍和党员
文件的存储结构(亦称物理结构) 文件的存储结构 文件的存储结构是指文件在外存上的组织方式 文件在外存上的基本的组织方式有四种顺序组织索引组织散列组织和链组织;对应的的文件名称分别为顺序文件索
DELPHI基础教程:开发Delphi对象式数据管理功能(三)[3] 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快
(1)发行人成立的注册登记文件;(2)主管部门和证券交易所批准发行上市的文件;(3)承销协议;(4)国有资产管理部门关于资产证明估的确认报告;...备查文件备查文件的内容至少包括以下各项:(1)发行人
烟草的播种期通常在冬季,为了保温御寒,一般采用薄膜育秧。为了培育壮秧,确保优质丰产,必须抓好苗床管理。其主要技术措施有:前期三促、后期三控、全期三防。 一、前期三促是指从播种到5片真叶期,这个期间,