jeudi 17 avril 2014

C# Simple fichier Versioning - débordement de pile


Is there a .NET supported way of programmatically versioning basic text, excel, word, etc. files in the file system?


More specifically, I am attempting to add a file version attribute to a Crystal Reports file that is streamed from a Server to the Client when the client requests to run a report. FileVersionInfo only supports reading the file version, and File.GetAttributes only gets things like Hidden, Readonly, etc.


Edit: Note that I do not need to keep old versions of these files on the client. I can delete them and replace them with the newer version of the report file. I just need a way to persist the file version on the client side.


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();



Plain files does not have these attributes. You will have to implement them externaly. this question is asked also here


According to MSDN:



Version resources are typically specified in a Win32 resource file, or in assembly attributes. For example the IsDebug property reflects the VS_FF_DEBUG flag value in the file's VS_FIXEDFILEINFO block, which is built from the VERSIONINFO resource in a Win32 resource file. For more information about specifying version resources in a Win32 resource file, see "About Resource Files" and "VERSIONINFO Resource" in the Platform SDK. For more information about specifying version resources in a .NET module, see the Setting Assembly Attributes topic. MSDN



So, there is some native way to store attributes for every file in a separate 'resource' file, but it will include some native method calls, and a .net warper class.



Is there a .NET supported way of programmatically versioning basic text, excel, word, etc. files in the file system?


More specifically, I am attempting to add a file version attribute to a Crystal Reports file that is streamed from a Server to the Client when the client requests to run a report. FileVersionInfo only supports reading the file version, and File.GetAttributes only gets things like Hidden, Readonly, etc.


Edit: Note that I do not need to keep old versions of these files on the client. I can delete them and replace them with the newer version of the report file. I just need a way to persist the file version on the client side.


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();


Plain files does not have these attributes. You will have to implement them externaly. this question is asked also here


According to MSDN:



Version resources are typically specified in a Win32 resource file, or in assembly attributes. For example the IsDebug property reflects the VS_FF_DEBUG flag value in the file's VS_FIXEDFILEINFO block, which is built from the VERSIONINFO resource in a Win32 resource file. For more information about specifying version resources in a Win32 resource file, see "About Resource Files" and "VERSIONINFO Resource" in the Platform SDK. For more information about specifying version resources in a .NET module, see the Setting Assembly Attributes topic. MSDN



So, there is some native way to store attributes for every file in a separate 'resource' file, but it will include some native method calls, and a .net warper class.


0 commentaires:

Enregistrer un commentaire