打开文件对话框按文件内容过滤

ard*_*new 3 delphi vcl

我通常使用TOpenDialogFilter属性来缩小用户的可用文件.我想进一步按内容过滤这些文件.

例如,打开文件对话框应仅显示带有".bin"文件扩展名的文件,其前4个魔术字节为0x7F,0x45,0x4C,0x46(ELF可执行文件).

条件并不总是必须识别某些可执行格式,而是其他二进制数据.

有没有在Delphi/VCL中执行此操作的标准方法,还是我必须推迟内容检查,直到用户选择文件为止?

Dav*_*nan 5

没有办法实现你想要的.系统文件对话框不允许您根据其内容过滤显示的文件.

OnIncludeItem件事似乎很有意义,可以满足您的需求.但是,它存在以下问题.

  1. 该事件包装CDN_INCLUDEITEM通知.此通知由旧版XP公共对话框触发,但不是由现代公共项对话框触发.因此,使用该事件会将旧版XP常用对话框强制插入到您的程序中.如果没有其他原因,这有整容的缺点.
  2. 更重要的是,处理CDN_INCLUDEITEM对文件没有影响.它只影响非文件系统shell对象.形成文件:

该对话框始终包含具有SFGAO_FILESYSTEM和SFGAO_FILESYSANCESTOR属性的项目,无论CDN_INCLUDEITEM返回的值如何.

相关问题: