在Delphi中有没有一种方法可以检查文件是否具有任何备用数据流?
FindFirstStreamW()
和 FindNextStreamW()
函数:
枚举指定文件或目录中的第一个带有
::$DATA
流类型的流。
继续先前调用
FindFirstStreamW
函数开始的流搜索。
但是,一个文件或目录可能有除 ::$DATA
之外的其他流类型,这些类型在 Win32 API 中无法枚举,它们是 NTFS 自身的内部数据。
有关详细信息,请参阅 MSDN。
要枚举非$DATA
数据流,您需要直接读取文件系统,例如使用BackupRead()
和BackupSeek()
。 有关详细信息,请参见CodeProject上的枚举备用数据流。CopyFileEx
是否会复制除 $DATA 以外的其他流吗?我想要的是在调用函数之前获取 CopyFileEx
将传输的所有数据的大小。 - Marus GradinaruCopyFileEx
会复制 ADS 流,正如文档中所述: "此函数保留扩展属性、OLE 结构化存储、NTFS 文件系统备用数据流、安全资源属性和文件属性。" 尝试使用 FindFirstFile()
或 GetFileAttributesEx()
来查看它是否报告包括流在内的完整文件大小。或者,忘记预先检索大小,并让 CopyFileEx
回调在复制时告诉你。 - Remy Lebeau
TStream
或TFileStream
的。我所指的流是附加到主文件的隐藏数据块。 - Marus Gradinaru