dsofile C# API / NTFS 自定义文件属性
我正在寻找一种向文件添加元数据的好方法。 dsofile.dll 适用于 NTFS。 当将一份副本放到 FAT32 共享上时(我猜它使用 NTFS 隐藏流),元数据就会丢失。 Microsoft Word文档包含不丢失的元数据,它们是如何做到的? 与 FAT 类似,通过电子邮件发送文件,其中包含使用 dsofile 创建的所有元数据(以及使用 Windows 资源管理器手动创建的元数据)。 单独的元数据文件不是一个选项。 它必须与标准 Windows 技术兼容。 如果我使用 Outlook 向某人发送文件并且他将其发回,则元数据不应丢失。
(所需的元数据实际上只是一个ID)
I'm searching for a good way to add meta data to a file. dsofile.dll works fine for NTFS. The meta data is lost, when one drops a copy on a FAT32 share (it uses NTFS hidden streams I guess). Microsoft Word documents contain meta data that are not lost, how do they do it? Similiar to FAT, sending the file via E-Mail strips of all meta data created with dsofile (and also meta data created by hand with Windows Explorer). Separate meta data files are not an option. It must be compatible with standard Windows techniques. If I send someone a file with Outlook and he sends it back, the meta-data should not be lost.
(the required meta data is actually only an ID)
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
问题是所有文件系统都提供文件的单流视图作为最大公分母。 通过这个公开文件“内容”的接口,您可以读取或存储属性,并通过简单的系统(或用户)实用程序将它们与“内容”一起传输。 例如,Windows 中的 CopyFile 会小心地丢失备用数据流,并且没有“影子文件”的概念。
问题是“内容”的格式是否允许任意添加属性。
某些格式允许任意内容(例如,MSFT 的 docfile 又名 .doc/.xls/etc)。 有些允许有限的内容(.mp3、.jpg、.exe)。
有些是完全 SOL(.txt、.bmp)。
The issue is that all file systems provide a single-stream view of the file as a greatest-common-denominator. Through this interface which exposes the files "contents", you can read or store properties and have them be transported with the "contents" by naive system (or user-) utilities. For example, CopyFile in Windows will carefully lose alternate data streams and has no notion of "shadow files".
The question is whether or not the format of the "contents" allows for arbitrary addition of properties.
Some formats allow arbitrary content (e.g., MSFT's docfile aka .doc/.xls/etc). Some allow limited content (.mp3, .jpg, .exe).
Some are completely SOL (.txt, .bmp).
任何解决方案都取决于格式。 MS OFFice 文件是(所有)复合文件,并且那里有一个放置属性的位置。 在某些格式(例如 PE 文件)中,如果您知道稍后如何读取数据,则将数据附加到文件末尾是安全的。 在 ZIP 文件中,您可能可以在目录中找到一个位置,或者只需将包含数据的帮助文件添加到存档中。 其他格式无法忍受这一点,您需要找到自己的方法来解决问题。
实际上,文件名也可以作为您的 ID 的一个很好的占位符。
如果您需要将文件存储在某处,但不需要外部应用程序保持文件可读,您可以将它们打包到 ZIP 存档或使用类似我们的 SolFS
图书馆。
Any solution would be format-dependent. MS OFfice files are (all) compound files and there's a place for properties there. In some formats (PE files, for example) it's safe to just append data to the end of the file, if you know how to read them later. In ZIP file you can probably find a place in the directory or just add a helper file with your data to the archive. Other formats can't stand this, and you'd need to find your own way at solving the problem.
Actually, file name can also be a good placeholder for your ID.
If you need to store the files somewhere but don't need the file to remain readable by outside applications, you can pack them to ZIP archive or use something like our SolFS
library.
标准属性而不是自定义 DSOFile 属性怎么样? 即评论、作者等? 他们会被抹掉吗?
不确定它是否理想,但我们解决它的一种方法是,我们有一个工具,可以获取 DSOfile 属性并保存文本文件,然后将其与文件一起通过电子邮件发送,并在另一端用户运行用于从文本重新导入 dsofile 属性的工具。
What about the standard properties rather than custom DSOFile properties? Ie Comments, Author etc? do they get wiped?
Not sure if its ideal but a way we've gotten around it is that we have a tool that will take the DSOfile properties and save a text file, which is then emailed along with the file, and at the other end the user runs a tool to re-import the dsofile properties from the text.