【发布时间】:2012-01-30 22:18:41
【问题描述】:
我正在尝试用 C# 编写一个独立的可执行文件,它将一个值附加到一个文本文件(不更改文件的内容),以后可以读取该文件。
我研究了以下解决方案,但没有一个完全有效:
- Shell32.dll:似乎只允许读取属性。我找不到任何有关如何使用 Shell32 编写属性的信息。
- DSOFile:应用程序需要独立,我也担心未来的操作系统兼容性。
- NTFS 备用数据流 (ADS):如果文件被移动或复制,许多工具将不会复制此信息,我担心未来的兼容性。
是否有另一种方法(COM 等)将自定义属性附加到 .NET 中的文本文件?
【问题讨论】:
-
当您说“自定义属性”时,您是指出现在文件属性对话框的详细信息选项卡上的那种吗?如果是这样,我相信您需要创建的是 shell 元数据处理程序,尽管我不确定。 MSDN 有更多信息msdn.microsoft.com/en-us/library/windows/desktop/…
-
我还应该补充一点,shell 属性处理程序是在 shell(资源管理器)内运行的进程内 COM 服务器。拥有一个依赖于 .NET 运行时的 shell 扩展是一个坏主意,因为它会导致 CLR 被注入 shell,以及使用需要加载扩展的 shell API 的进程。来源:blogs.msdn.com/b/oldnewthing/archive/2006/12/18/1317290.aspx
-
感谢您的回复:可能的重复问题讨论了已经考虑过的 ADS。
-
这些信息不需要在文件属性对话框中可见,正如您提到的,使用 .NET 创建 shell 扩展不一定是可取的。我只需要一个值(10-20 字符)以某种方式附加到文件,以便以后可以检索它。基于应用程序限制,使用 Zip 文件将两者捆绑在一起将不起作用。
-
我认为,您的问题的答案是否定的。文件的存储方式由您正在使用的特定文件系统控制,如果该文件系统不允许您将元数据附加到文件,则无法将元数据附加到文件。您可以解决将这些信息存储在其他地方并将其链接到文件但其他方式的问题。
标签: c# .net file-io filesystems