在delphi中怎么删除文件

在delphi中怎么删除文件,第1张

try

deletefile('文件路径和文件名')

except

showmessage('error')

end

直接删的话,就用上面这段代码,已经考虑到了如果当文件不存在时的情况.

画出每个自画项目

这在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

文件夹是一种特殊的文件(文件属性字节的高4位为0001),只要它是空的,也是可以用deletefile() 函数 或者 erase() 过程将其删除。

也可以 在 delphi程序中调用 *** 作系统的 RD 命令删除文件夹。


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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存