c ++ - Bestem om filen HANDLE er et rørhåndtag

Indlæg af Hanne Mølgaard Plasc

Problem



I en bestemt funktion modtager jeg en fil HANDLE, og jeg vil kontrollere, om dette filhåndtag er af ægte diskfilhåndtag og ikke af et rørhåndtag. Det er garanteret, at det ville være enten diskfil håndtere, eller det kan være rørhåndtag og ikke nogen anden type håndtag.


Hvordan kan jeg gøre det?


void ProcessHandle(HANDLE hFile)
{
       // Process only if disk file handle
}


Funktionen GetFileInformationByHandle ville hente filhåndteringsoplysninger og ville mislykkes, hvis håndtaget er et rørhåndtag, som dokumenteret: [12]



  Dette håndtag bør ikke være et rørhåndtag.



Det kræver dog en stor struktur (BY\_HANDLE\_FILE\_INFORMATION) og ville udfylde oplysningerne. Jeg leder ikke efter denne detaljerede information, så brug af denne funktion er et præstations hit.

Bedste reference


Det enkleste API-opkald til dette er GetFileType. Pass dit håndtag og sammenlign retursværdien med FILE\_TYPE\_DISK og FILE\_TYPE\_PIPE. [13]


Jeg tvivler dog meget på, at der vil være en målbar præstationsforskel mellem det alternativ du nævner i dit spørgsmål. Tager ikke ud, at kaldet GetFileInformationByHandle bliver langsommere. Kontroller først ved profilering.


Selvfølgelig er din brug af GetFileInformationByHandle en noget rundkørsel måde at afgrænse typen af ​​filen. Der er et godt argument om, at GetFileType er et bedre valg, da det får de oplysninger, du har brug for direkte. Faktisk, som diskuteret i forskellige kommentarer, ser det ud til, at GetFileInformationByHandle ikke opfylder dine behov funktionelt. Så brug GetFileType.