我想设置如Windows资源pipe理器文件属性 – >摘要选项卡(作者,标题,主题等)中显示的属性。 (在Windows 7是详细信息选项卡)我已经知道如何使用StgCreateStorageEx ,
目标文件扩展名是xls,xlsx,csv,txt和jpg文件。 操作系统:Windows 2003/2008 / XP / Windows 7.请注意,此代码将转到Web服务应用程序,并且服务器没有安装Excel。
注意:似乎没有关于如何设置它们的信息/示例代码。
哪些Windows的程序或服务可能会改变文件的LastAccessed属性?
如何在Windows上使用Python和ctypes读取或写入ashri文件属性?
在c#中读取扩展图像属性
添加自定义/新的属性到任何文件,无论types和扩展名,例如在.txt文件上设置“作者”
使用Java的文件/目录的networkingpath
由ShellExecuteEx打开时,在Windows文件属性对话框中缺less数据
要使用IPropertyStorage:WriteMultiple方法写摘要信息。 请参阅MSDN示例WriteRead 。 不是德尔福,但很容易转换。
function GetFileSummaryInfo(const FileName: WideString): String; const FmtID_Summary@R_732_4045@ion: TGUID = '{F29F85E0-4FF9-1068-AB91-08002B27B3D9}'; FMTID_DocSummary@R_732_4045@ion : TGUID = '{D5CDD502-2E9C-101B-9397-08002B2CF9AE}'; FMTID_UserDefinedProperties : TGUID = '{D5CDD505-2E9C-101B-9397-08002B2CF9AE}'; IID_IPropertySetStorage : TGUID = '{0000013A-0000-0000-C000-000000000046}'; const STGFMT_FILE = 3; //Indicates that the file must not be a compound file. //This element is only valid when using the StgCreateStorageEx //or StgOpenStorageEx functions to access the NTFS file system //implementation of the IPropertySetStorage interface. //Therefore,these functions return an error if the riid //parameter does not specify the IPropertySetStorage interface,//or if the specified file is not located on an NTFS file system //volume. STGFMT_ANY = 4; //Indicates that the system will determine the file type and //use the appropriate structured storage or property set //implementation. //This value cannot be used with the StgCreateStorageEx function. // Summary @R_732_4045@ion PID_TITLE = 2; PID_SUBJECT = 3; PID_AUTHOR = 4; PID_KEYWORDS = 5; PID_COMMENTS = 6; PID_TEMPLATE = 7; PID_LASTAUTHOR = 8; PID_REVNUMBER = 9; PID_EDITTIME = 10; PID_LASTPRINTED = 11; PID_CREATE_DTM = 12; PID_LASTSAVE_DTM = 13; PID_PAGECOUNT = 14; PID_WORDCOUNT = 15; PID_CHARCOUNT = 16; PID_THUMBNAIL = 17; PID_APPNAME = 18; PID_Security = 19; // Document Summary @R_732_4045@ion PID_CATEGORY = 2; PID_PRESFORMAT = 3; PID_BYTECOUNT = 4; PID_LINECOUNT = 5; PID_PARCOUNT = 6; PID_SLIDECOUNT = 7; PID_NOTECOUNT = 8; PID_HIDDENCOUNT = 9; PID_MMCLIPCOUNT = 10; PID_SCALE = 11; PID_headingPAIR = 12; PID_DOCPARTS = 13; PID_MANAGER = 14; PID_COMPANY = 15; PID_LINKSDIRTY = 16; PID_CHARCOUNT2 = 17; var I: Integer; PropSetStg: IPropertySetStorage; PropSpec: array of TPropSpec; PropStg: IPropertyStorage; PropVariant: array of TPropVariant; Rslt: HResult; S: String; Stg: IStorage; PropEnum: IEnumSTATPROPSTG; HR : HResult; PropStat: STATPROPSTG; k : integer; function PropertyPIDToCaption(const ePID: Cardinal): string; begin case ePID of PID_TITLE: Result := 'Title'; PID_SUBJECT: Result := 'Subject'; PID_AUTHOR: Result := 'Author'; PID_KEYWORDS: Result := 'Keywords'; PID_COMMENTS: Result := 'Comments'; PID_TEMPLATE: Result := 'Template'; PID_LASTAUTHOR: Result := 'Last Saved By'; PID_REVNUMBER: Result := 'Revision Number'; PID_EDITTIME: Result := 'Total Editing Time'; PID_LASTPRINTED: Result := 'Last Printed'; PID_CREATE_DTM: Result := 'Create Time/Date'; PID_LASTSAVE_DTM: Result := 'Last Saved Time/Date'; PID_PAGECOUNT: Result := 'Number of Pages'; PID_WORDCOUNT: Result := 'Number of Words'; PID_CHARCOUNT: Result := 'Number of Characters'; PID_THUMBNAIL: Result := 'Thumbnail'; PID_APPNAME: Result := 'Creating Application'; PID_Security: Result := 'Security'; else Result := '$' + IntToHex(ePID,8); end end; begin Result := ''; try OleCheck(StgOpenStorageEx(PWideChar(FileName),STGM_READ or STGM_SHARE_DENY_WRITE,STGFMT_FILE,nil,@IID_IPropertySetStorage,stg)); PropSetStg := Stg as IPropertySetStorage; OleCheck(PropSetStg.Open(FmtID_Summary@R_732_4045@ion,STGM_READ or STGM_SHARE_EXCLUSIVE,PropStg)); OleCheck(PropStg.Enum(PropEnum)); I := 0; hr := PropEnum.Next(1,PropStat,nil); while hr = S_OK do begin inc(I); SetLength(PropSpec,I); PropSpec[i-1].ulKind := PRSPEC_PROPID; PropSpec[i-1].propid := PropStat.propid; hr := PropEnum.Next(1,nil); end; SetLength(PropVariant,i); Rslt := PropStg.ReadMultiple(i,@PropSpec[0],@PropVariant[0]); if Rslt = S_FALSE then Exit; for k := 0 to i -1 do begin S := ''; if PropVariant[k].vt = VT_LPSTR then if Assigned(PropVariant[k].pszVal) then S := PropVariant[k].pszVal; S := Format(PropertyPIDToCaption(PropSpec[k].Propid)+ ' %s',[s]); if S <> '' then Result := Result + S + #13; end; finally end;
更多http://www.delphi-central.com/tutorials/File_Summary_Info.aspx 。 另外这个: http : //www.swissdelphicenter.ch/torry/showcode.PHP? id= 1614告诉你如何操作[IPropertyStorage]
部分答案:设置属性的Delphi代码可以在这里找到。 或者如果您有最新的JCL库 – 请在jclNtfs.pas上使用TJclFilePropertySet警告:请注意,此代码适用于xls文件,但对Windows 7 Pro / Enterprise或2008中的txt / cvs和jpg文件似乎不起作用(64位)。 看来M $已经改变了这些操作系统中的属性的工作方式: “你不能添加或改变某些类型的文件的文件属性,例如,你不能添加任何属性到TXT或RTF文件” 。 可悲的是,回到XP模式不是一个选项。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。