DELPHI文件、磁盘 *** 作函数

DELPHI文件、磁盘 *** 作函数,第1张

软件大多都要对文件 磁盘进行 *** 作 熟悉掌握这些函数可以帮助你轻松实现创建 删除 保存文件等功能

Append功能说明 追加内容到文件中 文件必须要存在

参考实例

var

S String

F TextFile

begin

S = This is a book

AssignFile(F C \MyFile txt ) // 将C \MyFile txt文件与F变量建立连接 后面可以使用F变量对文件进行 *** 作

Append(F) // 以追加的方式打开文件

Writeln(F S) // 将S变量中的内容追加到文本尾后

CloseFile(F) // 关闭文件

end

AssignFile功能说明 与指定的文件建立连接

参考实例

var

F TextFile // 声明文本文件类型变量

begin

AssignFile(F C \MyFile txt ) // 将C \MyFile txt文件与F变量建立连接 后面可以使用F变量对文件进行 *** 作

end

ChDir功能说明 改变当前目录(文件夹)

参考实例

var

sDir String

begin

sDir = C \Windows

ChDir(sDir) // 此时 系统的当前目录则为C \Windows目录

end

CloseFile功能说明 关闭文件 当对文件的 *** 作完成后 应该使用CloseFile函数关闭打开的文件

参考实例

var

S String

AllText String

F TextFile

begin

AssignFile(F C \MyFile txt ) // 将C \MyFile txt文件与F变量建立连接 后面可以使用F变量对文件进行 *** 作

Reset(F) // 打开文件

while not EOF(F) do begin // 使用While循环 一直判断是否到了文件未尾

Readln(F S) // 读取一行文本

AllText = AllText + S

end

CloseFile(F) // 关闭文件

end

DeleteFile功能说明 删除指定的文件 该函数只有一个参数 此参数为欲删除文件的完整路径 如果删除成功 则返回True 若删除失败 或文件不存在则返回False

参考实例

var

IsOK Boolean // 用于保存删除状态

begin

IsOK = DeleteFile( C \My Documents\l ) // 函数执著后 将结果返回给IsOK变量 如果IsOK变量为True 则表示文件删除成功

if IsOK then ShowMessage( 文件删除成功! )

else ShowMessage( 文件删除失败! )

end

DirectoryExists功能说明 检测指定的文件夹否存在 如果存在则返回True 反之则为False

参考实例

var

IsExists Boolean

begin

IsExists = DirectoryExists ( C \Windows )

if IsExists then ShowMessage( Windows文件夹存在! )

else ShowMessage( Windows文件夹不存在! )

end

DiskFree功能说明 获取指定磁盘的剩余空间 该函数只有一个参数 该参数用于指定要获取剩余空间的磁盘号 当参数为 时 表示获取当前磁盘的剩余空间 为A盘 为B盘 以此类推 如果返回值为

表示指定的磁盘无效

参考实例

var

FreeSize Int

begin

FreeSize = DiskFree( ) // 获取C盘中的剩余空间 返回的值是以 字节 为单位的

end

DiskSize功能说明 获取指定磁盘的空间 该函数只有一个参数 该参数用于指定要获取磁盘空间的磁盘号 当参数为 时 表示获取当前磁盘的空间 为A盘 为B盘 以此类推 如果返回值为 表示指

定的磁盘无效

参考实例

var

DiskSize Int

begin

DiskSize = DiskSize( ) // 获取C盘的空间 返回的值是以 字节 为单位的

end

EOF功能说明 判断文件指针是否移动到了文件未尾 当EOF函数返回值为True时 则不可以使用Readln函数进行读取文件了

参考实例

var

S String

AllText String

F TextFile

begin

AssignFile(F C \MyFile txt ) // 将C \MyFile txt文件与F变量建立连接 后面可以使用F变量对文件进行 *** 作

Reset(F) // 打开文件

while not EOF(F) do begin // 使用While循环 一直判断是否到了文件未尾

Readln(F S) // 读取一行文本

AllText = AllText + S

end

end

Erase功能说明 删除文件

参考实例

var

F File

begin

AssignFile(F C \MyFile txt ) // 将C \MyFile txt文件与F变量建立连接 后面可以使用F变量对文件进行 *** 作

Reset(F) // 打开文件

CloseFile(F) // 关闭文件

Erase(F) // 删除文件 在删除文件之前必须先关闭文件

end

FileExists功能说明 检测指定的文件否存在 如果存在则返回True 反之则为False

参考实例

var

IsExists Boolean

begin

IsExists = FileExists( C \Test txt )

if IsExists then ShowMessage( 该文件存在! )

else ShowMessage( 该文件不存在! )

end

FileSize功能说明 获取文件大小 返回的结果是字节为单位

参考实例

var

F file of Byte

nSize Longint

begin

AssignFile(F C \MyFile txt ) // 将C \MyFile txt文件与F变量建立连接 后面可以使用F变量对文件进行 *** 作

Reset(F) // 打开文件

nSize = FileSize(F) // 获取文件大小

CloseFile(F) // 关闭文件

end

ForceDirectories功能说明 创建新的子目录 路径中不存在的目录将一同创建

参考实例

ForceDirectories( C \Flash\MyFolder ) // 如果Flash文件夹本身不存的话 那么将会先创建Flash文件夹 然后再创建MyFolder文件夹

MkDir功能说明 创建一个新的子目录(文件夹)

参考实例

MkDir( C \MyFolder ) // 在C盘根目录中创建了一个名叫MyFolder的文件夹

需要注意的是 如果在本身不存在的目录中创建子目录将会失败 比如C盘根本不存在Flash文件夹 写成MkDir( C \Flash\MyFolder ) 这样将不能成功创建MyFolder文件夹

Reset功能说明 以只读方式打开文件

参考实例

var

F TextFile // 声明文本文件类型变量

begin

AssignFile(F C \MyFile txt ) // 将C \MyFile txt文件与F变量建立连接 后面可以使用F变量对文件进行 *** 作

Reset(F) // 打开文件

end

Rewrite功能说明 以可写方式打开文件 如果文件不存在 将会自动创建 使用该函数 将会覆盖文件中的所有内容

参考实例

var

F TextFile // 声明文本文件类型变量

begin

AssignFile(F C \MyFile txt ) // 将C \MyFile txt文件与F变量建立连接 后面可以使用F变量对文件进行 *** 作

Rewrite(F) // 打开文件 如果文件不存在 将会在C盘中创建MyFile txt文件 如果文件存在 将会覆盖MyFile txt中的所有内容

end

Readln功能说明 读取一行文本

参考实例

var

S String

F TextFile

begin

AssignFile(F C \MyFile txt ) // 将C \MyFile txt文件与F变量建立连接 后面可以使用F变量对文件进行 *** 作

Reset(F) // 打开文件

Readln(F S) // 读取一行文本到S变量中

end

Rename功能说明 更改文件名

参考实例

var

F File

begin

AssignFile(F C \MyFile txt ) // 将C \MyFile txt文件与F变量建立连接 后面可以使用F变量对文件进行 *** 作

ReName(F C \NewFile txt ) // 更名为NewFile txt

end

Writeln功能说明 写入一行文本

参考实例

var

S String

F TextFile

begin

S = This is a book

AssignFile(F C \MyFile txt ) // 将C \MyFile txt文件与F变量建立连接 后面可以使用F变量对文件进行 *** 作

Rewrite(F) // 创建新文件

Writeln(F S) // 将S变量中的内容写入文本中

lishixinzhi/Article/program/Delphi/201311/8445

画出每个自画项目

这在TabSet的OnDrawTab事件处理过程中完成 这一事件处理过程的参数中包含了待画项目索引 画板 待画区域 是否被选中等 这里我们只利用了前三个参数 事实上利用最后一个参数 我们可以对被选中的标签进行一些特殊的视觉效果处理 这一工作就留给读者自己去完成

procedure TFMForm DriveTabSetDrawTab(Sender: TObjectTabCanvas: TCanvas

R: TRectIndex: IntegerSelected: Boolean)

var

Bitmap: TBitmap

begin

Bitmap := TBitmap(DriveTabSet Tabs Objects[Index])

with TabCanvas do

begin

Draw(R Left R Top + Bitmap)

TextOut(R Left + + Bitmap Width R Top + DriveTabSet Tabs[Index])

end

end

文件管理基本功能的实现

在子窗口的File菜单中 定义了文件管理的基本功能 它们是

● Open :打开或运行一个文件(从文件列表框双击该文件可实现同样效果)

● Move :文件在不同目录间的移动

● Copy :文件拷贝

● Delete :文件删除

● Rename :文件更名

● Properties :显示文件属性

文件打开

文件打开功能可以运行一个可执行文件 或把文件在与之相关联的应用程序中打开 文件总是与创建它的应用程序相关联 这种关联可以在Windows的文件管理器中修改 要注意的是 文件的关联是以后缀名为标志的 因而对一个文件关联方式的修改将影响所有相同后缀名的文件

文件打开功能实现的关键是利用了Windows API函数ShellExecute 由于Windows API函数的参数要求字符串类型是PChar 而Delphi中一般用的是有结束标志的String类型 因此为调用方便我们把这一函数进行了重新定义如下

function ExecuteFile(const FileName Params DefaultDir: String

ShowCmd: Integer) THandle

var

zFileName zParams zDir: array[ ] of Char

begin

Result := ShellExecute(Application MainForm Handle nil

StrPCopy(zFileName FileName) StrPCopy(zParams Params)

StrPCopy(zDir DefaultDir) ShowCmd)

end

以上函数在fmxutils单元中定义 fmxutils是一个自定义代码单元

有关ShellExecute中各参数的具体含义读者可查阅联机Help文件

StrPCopy把一个Pascal类型的字符串拷贝到一个无结束符的PChar类型字符串中

在子窗口的Open Click事件处理过程中

procedure TFMForm Open Click(Sender: TObject)

begin

with FileList do

ExecuteFile(FileName Directory SW_SHOW)

end

如果FileList允许显示目录的话(即FileType属性再增加一项ftDirectory) 那么对于一个目录而言 打开的含义应该是显示它下边的子目录和文件 程序修改如下

procefure TFMForm Open Click(Sender: Tobject)

begin

With FileList do

begin

if HasAttr(FileName faDirectory) then

DirectoryOutline Directory := FileName

else

ExecuteFile(FileName Directory SW_SHOW)

end

end

其中HasAttr是一个fmxutils单元中的自定义函数 用于检测指定文件是否具有某种属性

function HasAttr(const FileName: StringAttr: Word) Boolean

begin

Result := (FileGetAttr(FileName) and Attr) = Attr

end

文件拷贝 移动 删除 更名

文件拷贝的关键是使用了以文件句柄为 *** 作对象的文件管理函数 因而提供了一种底层的I/O通道 在Object Pascal中这一点是利用无类型文件实现的

在文件拷贝中首先检查目标文件名是否是一个目录 如是则把原文件的文件名添加到目标路径后 生成目标文件全路径名 而后提取源文件的时间戳 以备拷贝完成后设置目标文件 拷贝过程中使用了返回文件句柄或以文件句柄为参数的文件管理函数FileOpen FileCreate FileRead FileWrite FileClose 为保证文件的正常关闭和内存的释放 在拷贝过程中进行异常保护

过程CopyFile实现上述功能 它定义在fmxutils单元中

procedure CopyFile(const FileName DestName: TFileName)

var

CopyBuffer: Pointer

TimeStamp BytesCopied: Longint

Source Dest: Integer

Destination: TFileName

const

ChunkSize: Longint =

begin

Destination := ExpandFileName(DestName)

if HasAttr(Destination faDirectory) then

Destination := Destination + \ + ExtractFileName(FileName)

TimeStamp := FileAge(FileName)

GetMem(CopyBuffer ChunkSize)

try

Source := FileOpen(FileName fmShareDenyWrite)

if Source <then

raise EFOpenError Create(FmtLoadStr(SFOpenError [FileName]))

try

Dest := FileCreate(Destination)

if Dest <then

raise EFCreateError Create(FmtLoadStr(SFCreateError [Destination]))

try

repeat

BytesCopied := FileRead(Source CopyBuffer^ ChunkSize)

if BytesCopied >then

FileWrite(Dest CopyBuffer^ BytesCopied)

until BytesCopied <ChunkSize

finally

FileSetDate(Dest TimeStamp)

FileClose(Dest)

end

finally

FileClose(Source)

end

finally

FreeMem(CopyBuffer ChunkSize)

end

end

如果我们不使用FileSetDate过程 Windows自动把当前时间作为时间戳写入文件

文件移动事实上是文件拷贝与文件删除的结合 fmxutils单元中的MoveFile过程实现了这一功能

procedure MoveFile(const FileName DestName: TFileName)

var

Destination: TFileName

begin

Destination := ExpandFileName(DestName)

if not RenameFile(FileName Destination) then

begin

if HasAttr(FileName faReadOnly) then

raise EFCantMove Create(Format(SFCantMove [FileName]))

CopyFile(FileName Destination)

DeleteFile(FileName)

end

end

EFCanMove是一个自定义异常类

type

EFCanMove := Class(EStreamError)

有关自定义异常类请参阅第十二章

文件删除 文件更名直接调用Delphi文件管理过程DeleteFile RenameFile 它们都以文件名为参数 *** 作执行前应d出一个对话框进行确认 执行完毕后应调用Update方法更新FileList的显示

lishixinzhi/Article/program/Delphi/201311/25232

函数NotInList用于判断待添加的字符串是否已存在于一个TStrings对象中 函数返回一个布尔型变量

NotInList的具体实现如下

Function TFileCtrForm NotInList(FileName: StringItems: TStrings) Boolean

var

i: Integer

begin

for I := to Items Count do

if Items[i] = FileName then

begin

NotInList := False

Exit

end

NotInList := True

end

按指定匹配字符串显示当前目录中的文件

当在FileEdit中输入一个匹配字符串 并回车 文件列表框将显示匹配结果 这一功能在FileEdit的OnKeyPress事件中实现

procedure TFileCtrForm FileEditKeyPress(Sender: TObjectvar Key: Char)

begin

if Key = # then

begin

FileListBox ApplyFilePath(FileEdit Text)

Key := #

end

end

文件列表框提供的ApplyFilePath方法是解决这一问题的关键所在

按指定匹配字符串查找当前目录中的文件

为了进行比较 我们用另一种方法来实现文件的查找功能 即利用标准过程FindFirst FindNext FileList 与ListBox 中的内容完全一致

当用户单击 查找 按钮时 与FileEdit 中字符串相匹配的文件将显示在ListBox 中 下面是实现代码

procedure TFileCtrForm Button Click(Sender: TObject)

var

i: Integer

SearchRec: TSearchRec

begin

Searched := True

Label Caption := Search Result

ListBox Items Clear

FindFirst(FileEdit text faAnyFile SearchRec)

ListBox Items Add(SearchRec Name)

Repeat

i := FindNext(SearchRec)

If i = then

ListBox Items Add(SearchRec Name)

until i <>

end

SearchRec是一个TSearchRec类型的记录 TSearchRec的定义如下

TSearchRec = record

Fill: array[ ] of Byte

Attr: Byte

Time: Longint

Size: Longint

Name: string[ ]

end

在这一结构中提供了很多信息 灵活应用将给编程带来很大方便 下面我们举几个例子

检测给定文件的大小

function GetFileSize(const FileName: String) LongInt

var

SearchRec: TSearchRec

begin

if FindFirst(ExpandFileName(FileName) faAnyFile SearchRec) = then

Result := SearchRec Size

else

Result :=

end

这一程序将在下一节中应用

获取给定文件的时间戳 事实上等价于FileAge函数

function GetFileTime(const FileName: String) Longint

var

SearchRec: TSearchRec

begin

if FindFirst(ExpandFileName(FileName) faAnyFile SearchRec) = then

Result := SearchRec Time

else

Result :=

end

检测文件的属性 如果文件具有某种属性 则

SearchRec Attr And GivenAttr >

属性常量对应的值与意义如下表

表 属性常量对应的值与意义

━━━━━━━━━━━━━━━━━━━━

常量 值 描述

─────────────────────

faReadOnly $ 只读文件

faHidden $ 隐藏文件

faSysFile $ 系统文件

faVolumeID $ 卷标文件

faDirectory $ 目录文件

faArchive $ 档案文件

faAnyFile $ F 任何文件

━━━━━━━━━━━━━━━━━━━━

文件管理综合举例 文件管理器的实现

在本章的最后 我们利用Delphi提供的文件控件和文件管理函数开发一个简单的文件管理器 虽然这一文件管理器还无法和Windows提供的文件管理器相比拟 但它也为一般的文件 *** 作提供了足够多的功能 而且如果读者感兴趣 还可以对它做进一步的扩充 在后边的拖放 *** 作一章中 我们就为它提供了拖放支持 使它看起来更象一个 文件管理器

设计基本思路

窗口设计

文件管理器的主窗口是一个多文档界面(MDI) 有关文件 目录的显示和文件管理功能的实现都放在子窗口中 在程序执行过程中将根据需要d出一些完成不同 *** 作的对话框 这些对话框都是在需要时动态生成的 表 给出了本程序所设计窗体的清单

表 FileManger窗体清单

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

窗体类 功能 用于创建该类窗体的菜单项

──────────────────────────────────────

TFileManager 主窗口

TFMForm 子窗口 Windows|New Window

TFileAttrForm 显示文件属性 File|PropertiesFunction|Search

TChangeForm 文件移动 拷贝 改名 改变 File|Move Cope Rename 当前目录等 *** 作的输入对话框 Directory|change Directory

TSearchForm 输入待查找文件的名称和路径 Function|Search

TDiskViewForm 显示磁盘信息 Function|Disk View

TViewDir 输入待创建的子目录 Directory|CreateDirectory

TAboutBox 显示版权信息 Help|About

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

界面设计

主窗口界面主要是主菜单和用于表示当前目录 当前文件的状态条

表 主窗口界面设计

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

部件 属性 功能

─────────────────────────────

FileManager Style=fsMDI 主窗口

WindowMenu=Windows

Position=poDefault

MainMenu 主菜单

FilePanel Align=alBottom 显示当前选中文件

BevelInner=bvLowered

BevelWidth=

DirectoryPanel Align=alBottom 显示当前选中目录

Alignment=taLeftJustify

BevelInner=bvLowered

BevelWidth=

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

主窗口主菜单包括File WIndows Help三项 File菜单项在子窗口生成时被子窗口同名菜单项所取代 设置Windows Help的GroupIndex = 可以使子窗口生成时这两个菜单项仍存在

子窗口界面包括主菜单 目录树(DirectoryOutline) 文件列表框 用于显示驱动器的标签集(TabSet)以及三个用于显示驱动器类型的TImage部件

表 子窗口界面设计

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

部件 属性 功能

───────────────────────────────────────

FMForm ActiveControl=DirectoryOutline 子窗口

Position=poDefault

Style=fsMDIChild

MainMenu 主菜单

DriveTabSet Align=alTop 显示驱动器

style=tsOwnerDraw

DirectoryOutline Align=alLeft 显示当前驱动器的目录树

options=[ooDrawTreeRoot

ooDrawFocusRect ooStretchBitmaps]

FileList Align=alClient 显示当前目录中的文件

FileType=[ftReadOnly

ftHidden ftSystem ftArchive ftNormal]

ShowGlyphs=True

Neork(Image) Picture(Neork bmp) 标志网络驱动器

Vsible=False

Floppy(Image) Picture(Floppy bmp) 标志软驱

Visible=False

Fixed(Image) Picture(Fixed bmp) 标志硬驱

Visible=False

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

lishixinzhi/Article/program/Delphi/201311/25238


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/12035533.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-20
下一篇 2023-05-20

发表评论

登录后才能评论

评论列表(0条)

保存