Gi meg detaljene eller filinformasjon Info

Hvordan lese filinformasjon Informasjon for non Kontor filesOn Windows 2000 kan du høyreklikke i Explorer for å få filegenskaper på en fil, og kan knytte sammendragsinformasjon til alle typer filer, inkludert enda tekstfiler .For Word eller Excel-dokumenter (sammensatte filer) sammendraget informasjon er en del av dokumentet itself.For andre typer filer veien for å lagre tilleggsinformasjon er forskjellige. Denne funksjonen er bare tilgjengelig på volumer som er formatert med NTFS. NTFS gjennomføringen lagrer eiendom komplekser i alternative strømmer av en NTFS-fil. De alternative bekker må kopieres når hoved filen er kopiert. Men ikke alle filsystemer støtter slike bekker. For eksempel, hvis en NTFS fil med eiendom komplekser kopieres til et FAT-volum, blir bare dataene i filen kopiert; eiendommen sett er lost.First ting du sannsynligvis vil gjøre er å finne ut om dagens volum er NTFS: //IsNTFS () - Kontrollerer om filen volum er NTFS
funksjon
IsNTFS ( AFileName: string
): boolean; Var
FSO, drv: OleVariant; begynne
IsNTFS: = False; fso: = CreateOleObject ('Scripting.FileSystemObject'); drv: = fso.GetDrive (fso.GetDriveName (AFileName)); hvis
drv.FileSystem = 'NTFS' deretter
IsNTFS: = True; end
, men hvordan å lese disse egenskapene? Er det virkelig Naudsynt å arbeide med en streamer? Nei, NTFS filsystem 5.0 gir en implementering av IPropertySetStorage grensesnitt for filer på et NTFS-volum når selve filene er ikke sammensatte filer. For å få en peker til NTFS gjennomføring av IPropertySetStorage, må vi kalle StgCreateStorageEx funksjon: funksjon
StgOpenStorageEx ( konst
pwcsName: POleStr; //Peker til banen til //inneholder lagringsobjekt fil
grfMode: LongInt; //Angir tilgangsmodus for objektet
stgfmt: DWORD; //Angir lagring filformat
grfAttrs: DWORD; < i> //Reserved; må være null
pStgOptions: Pointer; //adresse STGOPTIONS pekeren
reserved2: Pointer; //Reserved; må være null
riid: PGUID; < i> //Angir GUID av grensesnittet pekeren
ut
stgOpen: //adresse et grensesnitt pekeren
iStorage): hresult; STDCALL
; eksterne
'Ole32.dll'; Alle Microsoft Windows 2000 søknader bør bruke denne nye funksjonen, StgOpenStorageEx, i stedet for StgOpenStorage, for å dra nytte av den forbedrede Windows 2000 Structured Storage features.The gjennomføring av IPropertySetStorage på NTFS-filsystemet ligner med sammensatt fil implementering og kun tilgjengelig på Windows 2000. Windows 95 og Windows NT 4.0 og tidligere versjoner kan ikke få tilgang til denne interface.However, kan du ikke få tak i NTFS gjennomføring av IPropertySetStorage for en sammensatt fil. Når du åpner en sammensatt fil med StgOpenStorage, med angivelse av STGFMT_FILE oppregning verdi resulterer i en error.The neste funksjon dumper alle egenskapene til den spesifikke filen. Ved å endre STGFMT_FILE flagget i StgOpenStorageEx kallet til STGMT_ANY du kan åpne en strukturert Storage eiendom sett eller en NTFS filsystem eiendom sett funksjon
GetFileSummaryInfo ( konst
Filename: WideString):. String
; konst
FmtID_SummaryInformation: TGUID = {F29F85E0-4FF9-1068-AB91-08002B27B3D9} '; FMTID_DocSummaryInformation: TGUID = {D5CDD502-2E9C-101B-9397-08002B2CF9AE} '; FMTID_UserDefinedProperties: TGUID = {D5CDD505-2E9C-101B-9397-08002B2CF9AE} '; IID_IPropertySetStorage: TGUID = {0000013A-0000-0000-C000-000000000046}; konst
STGFMT_FILE = 3; //Indikerer at filen ikke må være en sammensatt fil. //Dette elementet er kun gyldig når du bruker StgCreateStorageEx //eller StgOpenStorageEx funksjoner for å få tilgang til NTFS-filsystemet //gjennomføringen av IPropertySetStorage grensesnittet. //Derfor er disse funksjonene returnere en feil hvis riid //parameter ikke angir IPropertySetStorage grensesnitt, //eller hvis den angitte filen ikke ligger på en NTFS-filsystemvolum.
STGFMT_ANY = 4; //Indikerer at systemet vil bestemme filtypen og //bruk riktig strukturert lagring eller eiendom sett //gjennomføring. //Denne verdien kan ikke brukes med StgCreateStorageEx funksjon .//Summary Information
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 Information
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: rekke
TPropSpec; PropStg: IPropertyStorage; PropVariant: rekke
TPropVariant; Rslt: hresult; S: String
; Stg: iStorage; PropEnum: IEnumSTATPROPSTG; HR: hresult; PropStat: STATPROPSTG; k: integer; funksjon
PropertyPIDToCaption ( konst
epiD: Cardinal): string
; begynne tilfelle
epiD av
PID_TITLE : Resultat: = 'Tittel'; PID_SUBJECT: Resultat: = 'tema'; PID_AUTHOR: Resultat: = 'Forfatter'; PID_KEYWORDS: Resultat: = 'nøkkelord'; PID_COMMENTS: Resultat: = 'kommentarer'; PID_TEMPLATE: Resultat: = 'mal'; PID_LASTAUTHOR: Resultat: = 'Sist Saved By'; PID_REVNUMBER: Resultat: = 'Revisjonsnummer'; PID_EDITTIME: Resultat: = 'Total Redigering Time'; PID_LASTPRINTED: Resultat: = 'Sist Trykt'; PID_CREATE_DTM: Resultat: = 'Opprett Time /Date'; PID_LASTSAVE_DTM: Resultat: = 'Sist sparte tid /dato'; PID_PAGECOUNT: Resultat: = 'Antall sider'; PID_WORDCOUNT: Resultat: = 'Antall Words'; PID_CHARCOUNT: Resultat: = 'Antall tegn'; PID_THUMBNAIL: Resultat: = 'Thumbnail'; PID_APPNAME: Resultat: = 'Oppretter Application'; PID_SECURITY: Resultat: = 'Security'; annet
Resultat: = '$' + IntToHex (epiD, 8); Sluttslutt
; begynne
Resultat: '' =; prøve
OleCheck (StgOpenStorageEx (PWideChar (Filename), STGM_READ eller
STGM_SHARE_DENY_WRITE, STGFMT_FILE, 0, nil
, nil
,IID_IPropertySetStorage, stg )); PropSetStg: = Stg som
IPropertySetStorage; OleCheck (PropSetStg.Open (FmtID_SummaryInformation, STGM_READ eller
STGM_SHARE_EXCLUSIVE, PropStg)); OleCheck (PropStg.Enum (PropEnum)); I: = 0; hr: = PropEnum.Next (1, PropStat, nil
); mens
hr = S_OK gjør begynne
inc (I); SetLength (PropSpec, jeg); PropSpec [i-1] .ulKind: = PRSPEC_PROPID; PropSpec [i-1] .propid: = PropStat.propid; hr: = PropEnum.Next (1, PropStat, nil
); end
; SetLength (PropVariant, i); Rslt: = PropStg.ReadMultiple (i,PropSpec [0],PropVariant [0]); hvis
Rslt = S_FALSE deretter
Exit; for
k: = 0 for bedriften jeg -1 ikke begynne
S: = ''; hvis
PropVariant [k] .vt = VT_LPSTR så hvis
Assigned (PropVariant [k] .pszVal) deretter
S: = PropVariant [k] .pszVal; S: = Format (PropertyPIDToCaption (PropSpec [k] .Propid) + '% s', [s]); hvis
S < > '' deretter
Resultat: = Resultat + S + # 13; end
; til slutt ende
; end
;