当前位置: 首页 > 编程语言 > C#

自定义文件属性分享

时间:2023-04-10 20:32:48 C#

自定义文件属性BOUNTY开始了,但是我想用C#做例子我需要遵循:在我的应用程序中,我有文件。需要一直检查退出的文件。当我从我的应用程序签入文档时,我需要向文件添加自定义属性,以便稍后在签入文档时能够识别它。我尝试使用以下代码使用DSOFile的OleDocumentProperties,但没有成功://Addingcustompropertiestofile(Parameters:FileName,custompropertyname,value,debug:true/falseDocumentProperties.WriteDocumentProperty(filename,"dms_filenumber",_filenumber.ToString(),假);DocumentProperties.WriteDocumentProperty(文件名,“dms_casename”,ReturnCaseName(_casenumber),假);DocumentProperties.WriteDocumentProperty(文件名,“dms_verantw_medew”,ReturnVerantwMedew(_casenumber),假);DocumentProperties.WriteDocumentProperty(文件名,“dms_document_path“,路径,假);DocumentProperties.WriteDocumentProperty(文件名,“dms_filename”,文件名,假);DocumentProperties.WriteDocumentProperty(文件名,“dms_file_id”,fileId,假);DocumentProperties.WriteDocumentProperty(文件名,“dms_is_checkedout”,“真”,false);DocumentProperties.WriteDocumentProperty(文件名,"dms_dossier_map_id",dossierMapId,false);DocumentProperties.WriteDocumentProperty(文件名,"dms_bestand_versie_nummer",Queries.Dms.Selects.GetDocumentVersion(Convert.ToInt32(bestandId)).ToString(),false);DocumentProperties.WriteDocumentProperty(文件名,"dms_bestands_locatie",path,false);有谁知道另一种向文件添加自定义文件属性的方法?什么是文档?基本上,一个文件只是一个字节流和文件系统与之关联的一些元数据在早期的文件系统中,元数据基本上只是一个文件名和一些日期戳。较新的文件系统(如NTFS)可以选择添加额外的元数据。文档属性从何而来?在Windows资源管理器中,您可以看到许多文件类型的许多文档属性。漂亮的统一界面表明存在一些统一的属性存储。但事实上并非如此。ExplorerShell有一个可扩展的属性表处理程序接口,可以从各种文件类型中提取此信息。有一个用于JFIF(JPEG)文件的处理程序,还有一个用于OLE文件(旧的Office格式)以及较新的Office格式的处理程序。我应该把我的元数据放在哪里?结论:如果您可以保证所有挂载都在特定文件系统上,请调查文件系统的功能。其他回复已经考虑过如何使用NTFS来做到这一点。否则,您必须设计自己的数据存储。配套文件显然是可能的;您可以将元数据存储在数据库中;或者您可以为每个目录创建一个文件,其中包含该目录中文件的所有元数据。考虑您是否可能遇到对同一文件的多个请求的并发问题。使用数据库可能会使过程更简单。备用数据流将允许您存储您想要的任何数据。谨防;如果将文件复制到非NTFS文件系统,多余的数据将被删除。这篇文章应该可以帮助您入门-2014年1月2日编辑-这里有更多信息:http://www.codeproject.com/Articles/2670/Accessing-alternative-data-streams-of-files-on-anhttp://www.dreamincode.net/forums/topic/90666-ReadandWritealternate-streams-in-c%23/NTFSAlternateStreams–.NET还有一个用于从命令行创建/查看ADS:http://www.undermyhat.org/blog/2012/05/copy-delete-or-rename-alternate-data-streams-using-only-standard-windows-tools-command-prompt/虽然可以使用DSOFile。dll可以打开任何类型的文件,但不会保留自定义属性,除了旧文件格式,如OLE结构化存储/Ole文档(http://en.wikipedia.org/wiki/COM_Structured_Storage)MicrosoftOffice文件(.doc、.xls等)和一些CAD文件。正如Brad所写,您可以使用备用数据流,但它也有一个依赖项,即NTFS文件系统。我建议你不要这样做......如果你使用一个新文件怎么办?.props等?这里有多个选项。如上所述,如果你能保证你的文件永远在NTFS上,备用数据流是一个不错的选择。您可以将自定义属性编写为JSON、XML、序列化对象,甚至是简单的行+定界符格式。不幸的是,使用.NET并不完全可用,您必须使用P/Invoke和CreateFile。[DllImport("kernel32.dll",CharSet=CharSet.Auto,CallingConvention=CallingConvention.StdCall,SetLastError=true)]privatestaticexternSafeFileHandleCreateFile(stringlpFileName,uintdwDesiredAccess,uintdwShareMode,IntPtrSecurityAttributes,uintdwCreationDisposition,uintdwFlagsAndAttributes,IntPtrhTemplateFile);然后您必须使用文件路径创建数据流,后跟一个冒号,然后是流的名称作为文件名,并将CreateFile返回的SafeFileHandle传递给FileStream的构造函数。CreateFile的所有其他选项都正常用于通过此API打开文件。请注意,如果要写入备用数据流,则必须具有文件的写入权限。这是CreateFile的参考。http://msdn.microsoft.com/en-us/library/windows/desktop/aa363858(v=vs.85).aspx以下是一些有用的常量:privateconstuintGENERIC_WRITE=0x40000000;私人constuintGENERIC_READ=0x80000000;私有结构FILE_SHARE_READ=0x00000001;私有结构FILE_SHARE_WRITE=0x00000002;私有构造CREATE_NEW=1;私有构造CREATE_ALWAYS=2;私有结构OPEN_EXISTING=3;私有结构OPEN_ALWAYS=4;不需要P/Invoke与NTFS之外的文件系统友好方法是创建第二个文件,其中包含原始文件的完整路径名+添加的另一个扩展名。同样,您可以使用您喜欢的方法将属性存储在此文件中。但是,这样做的缺点是如果用户移动文件,他们也必须移动属性。我终于找到了一种向Word文档添加文档属性的简单方法。只使用DSOFile.dll?奇迹般地起作用!以上就是《C#学习教程:自定义文件属性共享》的全部内容。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: