2017-05-30 83 views
3

德尔福有没有方法检查文件是否有任何备用数据流?如何检查文件是否具有备用数据流?

+0

我不明白。 “其他数据流”是什么意思?单个文件成为单个流。我从来没有听说过一个文件通过多个流访问。 –

+0

@JerryDodge:我没有密切关注他们的历史,但我认为辅助/备用数据流的存在时间与NTFS一样长 - 请参阅https://blogs.technet.microsoft.com/askcore/2013/03/ 24/alternate-data-streams-in-ntfs /# – MartynA

+1

几乎每个文件都有多个数据流:http://www.ntfs.com/ntfs-permissions-security-descriptor.htm –

回答

5

看一看在Win32 API FindFirstStreamW()FindNextStreamW()功能:

枚举与指定的文件或目录在::$DATA流类型第一流的。

继续由先前调用FindFirstStreamW功能开始流搜索。

然而,一个文件或目录可能有除了::$DATA其他流类型,这是不是在Win32 API中枚举的,他们是内部的NTFS本身。

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

Using Streams

File Streams

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

+0

谢谢。但是,你知道'CopyFileEx'是否会复制除$ DATA之外的其他流吗?我想要的是获取'CopyFileEx'将传输的所有数据的大小,但在调用函数之前。 –

+1

@MarusNebunu是的,'CopyFileEx'复制ADS流,如文档中所述:“*此功能保留扩展属性,OLE结构化存储,** NTFS文件系统备用数据流**,安全资源属性和文件属性。 “尝试使用FindFirstFile()或GetFileAttributesEx()来查看它是否报告包括流在内的完整文件大小。或者,只是忘了事先检索大小,并让CopyFileEx'回调在复制时告诉你。 –