知识大全 文件管理(三)[1]

Posted 文件

篇首语:知识是心灵的活动。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 文件管理(三)[1]相关的知识,希望对你有一定的参考价值。

DELPHI基础教程:文件管理(三)[1]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

   画出每个自画项目

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

  procedure TFMForm DriveTabSetDrawTab(Sender: TObject; TabCanvas: TCanvas;

  R: TRect; Index: Integer; Selected: 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: String; Attr: 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 它们都以文件名为参数 操作执行前应弹出一个对话框进行确认 执行完毕后应调用Update方法更新FileList的显示

cha138/Article/program/Delphi/201311/25232

相关参考

知识大全 文件管理(三)[3]

DELPHI基础教程:文件管理(三)[3]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  没有办

知识大全 文件管理(三)[2]

DELPHI基础教程:文件管理(三)[2]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  一致的

知识大全 操作系统的文件系统由哪五部分组成的

操作系统的文件系统由哪五部分组成的文件系统由三部分组成:1、文件系统的接口,对对象操纵和管理的软件集合;2、对象;3、属性。文件系统介绍:文件系统是操作系统用于明确存储设备(常见的是磁盘,也有基于NA

知识大全 文件管理(一)[1]

DELPHI基础教程:文件管理(一)[1]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  文件是

下列选项属于我国农村干部管理考核和激励机制“一定三有”的是

下列选项属于我国农村干部管理考核和激励机制“一定三有”的是_____。A、定权责立规范B、收入有保障C、干好有希望D、退后有所养答案:ABCD解析:中央一号文件指出:加强农村基层党组织带头人队伍和党员

知识大全 文件管理(二)[1]

DELPHI基础教程:文件管理(二)[1]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  记录的

知识大全 文件 - 文件的基本概念(三)

  文件的存储结构(亦称物理结构)  文件的存储结构  文件的存储结构是指文件在外存上的组织方式  文件在外存上的基本的组织方式有四种顺序组织索引组织散列组织和链组织;对应的的文件名称分别为顺序文件索

知识大全 管理好密码文件对执行数据库管理的重要性[1]

  在Oracle系统中用户使用特权用户身份(INTERNAL/SYSDBA/SYSOPER)登录Oracle有两种身份验证方法  使用与操作系统集成的身份验证  使用Oracle数据库的密码文件进行

知识大全 手机问题文件管理中的英文是什么意思

手机问题文件管理中的英文是什么意思,华为手机文件管理中的各种英文文件代表什么意思?手机文件夹里的详细英文:1、android_secure是官方app2sd的产物,删了之后装到sd卡中的软件就无法使用

指出“文章和文件都应当具有三种性质:准确性、鲜明性、生动性”的是

指出“文章和文件都应当具有三种性质:准确性、鲜明性、生动性”的是_____。A、列宁B、马克思C、周恩来D、毛泽东答案:D解析:毛主席在《文章的“三性”和写作方法》中指出,文章和文件都应当具有这样三种