2013-04-23 52 views
0

是否有.NET支持的方式在程序中对文件系统中的基本文本,excel,word等文件进行版本化?C#简单文件版本

更具体地说,我试图将文件版本属性添加到客户端请求运行报表时从服务器流式传输到客户端的Crystal Reports文件。 FileVersionInfo只支持读取文件版本,以及File.GetAttributes只得到像HiddenReadonly东西,等

编辑:请注意,我不需要保留在客户端上这些文件的旧版本。我可以删除它们并用新版本的报告文件替换它们。我只需要一种方法来在客户端持久保存文件版本。

string path = @"C:\myReport.rpt"; 

FileVersionInfo myFileVersionInfo = FileVersionInfo.GetVersionInfo(path); 

Console.WriteLine("File: " + myFileVersionInfo.FileDescription + 
        '\n' + "Version: " + myFileVersionInfo.FileVersion); 

if(File.Exists(path)) 
{ 
    var fileAttributes = File.GetAttributes(path); 
} 
Console.ReadKey(); 
+1

Windows文件系统不直接支持版本控制。您可以使用一些支持版本控制的容器,但是您需要以某种方式将文件公开到操作系统。 – 2013-04-23 13:25:30

+0

所以我会被迫使用配置文件或某种外部版本控制文件?我也有能力在Java中这样做,所以我研究了使用'UserDefinedFileAttributeView'接口,但是在文件上创建版本后,Java似乎是唯一可以查看此版本的东西。我无法查看文件详细信息以查看我附加到文件的版本。 – gwin003 2013-04-23 13:37:29

+0

为什么不配合版本控制系统? – 48klocs 2013-04-23 14:04:20

回答

2

纯文件没有这些属性。你将不得不在外部实现它们。这个问题是问也here

根据MSDN:

版本资源在Win32资源文件来指定的,或者在组装属性。例如,IsDebug属性反映文件的VS_FIXEDFILEINFO块中的VS_FF_DEBUG标记值,该块由Win32资源文件中的VERSIONINFO资源构建。有关在Win32资源文件中指定版本资源的更多信息,请参阅Platform SDK中的“关于资源文件”和“VERSIONINFO资源”。有关在.NET模块中指定版本资源的更多信息,请参阅设置装配属性主题。 MSDN

因此,有存储的属性在一个单独的“资源”文件中的每个文件的一些土办法,但将包括一些本地方法调用和.NET整经班。

+0

谢谢d.popov,我将不得不权衡我的选项,因为如果没有必要,我们不想为版本提供单独的文件。 – gwin003 2013-04-23 14:09:35