【问题标题】:How to check if a file has Alternate Data Streams?如何检查文件是否有备用数据流?
【发布时间】:2017-05-30 19:32:38
【问题描述】:

Delphi 中有没有办法检查文件是否有任何备用数据流?

【问题讨论】:

  • 我不明白。 “附加数据流”是什么意思?单个文件成为单个流。我从未听说过通过多个流访问文件。
  • 几乎每个文件都有多个数据流:ntfs.com/ntfs-permissions-security-descriptor.htm
  • 不,@JerryDodge,这与TStream 或TFileStream 无关。我引用的流是附加到主文件的隐藏数据卡盘。
  • @Marus 是的,我明白了,自从我的第一个 cmet 之后,我得到了它。我只是澄清我错了,而不是试图提出另一个主张。

标签: delphi stream delphi-2009


【解决方案1】:

查看 Win32 API FindFirstStreamW() 和 FindNextStreamW() 函数:

枚举指定文件或目录中具有::$DATA 流类型的第一个流。

继续通过先前调用 FindFirstStreamW 函数启动的流搜索。

但是,文件或目录可能具有除::$DATA 之外的其他流类型,这些流类型在 Win32 API 中是不可枚举的,它们是 NTFS 自身内部的。

有关详细信息,请参阅 MSDN。

Using Streams

File Streams

要枚举非$DATA 流,您必须直接读取文件系统,例如使用BackupRead() 和BackupSeek()。有关详细信息,请参阅 CodeProject 上的 Enumerating Alternate Data Streams。

【讨论】:

  • 谢谢。但是,您知道 CopyFileEx 是否会复制 $DATA 以外的其他流吗?我想要的是获取CopyFileEx 将传输的所有数据的大小,但在调用函数之前。
  • @MarusNebunu 是的,CopyFileEx 复制 ADS 流,如文档中所述:“此函数保留扩展属性、OLE 结构化存储、NTFS 文件系统备用数据流、安全资源属性和文件属性。”尝试使用FindFirstFile() 或GetFileAttributesEx() 来查看它是否报告包括流在内的完整文件大小。或者,忘记事先检索大小,让CopyFileEx 回调在复制时告诉您。
猜你喜欢
  • 1970-01-01
  • 2011-03-11
  • 1970-01-01
  • 2022-06-21
  • 1970-01-01
  • 2010-10-14
  • 2011-11-22
  • 1970-01-01
  • 2014-04-12
相关资源
最近更新 更多