存储有关文件的其他元数据

时间:2013-11-12 13:31:27

标签: c# c++ windows zip metadata

对于一个小项目,我希望能够存储有关文件的其他信息,并将该信息保存在文件中,即使它被移动。

附加信息将存储在XML文件中。为了将文件及其描述保持在一起,我考虑使用ZIP压缩文件而不进行任何压缩,但我希望这些ZIP存档的行为与原始文件一样(即如果原始文件是视频文件,则双击在存档上应该打开媒体播放器中的文件)。这需要我编写一个处理这种“新”文件格式的小程序。

但是,我还没有找到一个解决方案,允许我在没有首先从存档中提取文件的情况下打开文件(即使没有压缩),这需要一些时间而不是我想要的。

我的问题是:是否有一个库(用于C#或C / C ++)允许我打开一个zip文件并直接播放/打开其中的文件而无需提取存档?或者是否有更简单的方法来实现我需要的东西(也许我在想错误的方向)?

1 个答案:

答案 0 :(得分:4)

Windows已允许您通过Windows Property System存储有关shell项目(包括文件)的其他元数据。

Windows API Code Pack包含有关如何使用许多本机操作系统功能的示例和文档,包括Property System。

以下摘录来自PropertyEdit样本。

按名称获取文件的属性:

var myObject= ShellObject.FromParsingName(fileName);
IShellProperty prop = myObject.Properties.GetProperty(propertyName);

设置字符串属性:

if (prop.ValueType == typeof(string))
{
    (prop as ShellProperty<string>).Value = value;
}

如果您不想使用Property System,则可以使用NTFS备用数据流来存储有关文件的其他信息。在.NET中没有对ADS的直接支持,但是简单的搜索会返回多个包装器,库和有关它们的SO问题,例如NTFS - Alternate Data Streams