Forskellige måder at åbne en fil på C ++ på Windows?

Indlæg af Hanne Mølgaard Plasc

Problem



Når du bruger fopen eller fstream, er det nødvendigt at angive binær tilstand for at forhindre tegnkonverteringer. På UNIX-lignende systemer er det normalt ikke nødvendigt, men i Windows er det.


Dette får mig til at undre sig over, om dette stadig er den 'naturlige' måde at få adgang til filsystemdata på dette operativsystem. UNIX har 'alt er en fil' arkitektur går efter det, så er der nogle vinduer svarende til en lavere enhed for at få adgang til dataene? Når alt kommer til alt, hvis der er tegnkonverteringer der foregår, er der overhead involveret i at kontrollere hvert tegn for at se om det skal konverteres. Forhåbentlig åbner en fil i binær tilstand simpelthen at deaktivere sådan behandling, men jeg er i tvivl.


Kan nogen kaste lys over dette?

Bedste reference


C-kørselstidsbibliotekerne gør, hvad C-kørselstidsbiblioteker gør.


Windows har faktisk mest ting som en fil (eller skal jeg sige objekter) et filnavn i Windows er faktisk et objekt i det globale navneområde ??. Hvis du kigger på dokumentationen til CreateFile på MSDN, er der meget mere til det, især hvis du går gennem Windows-kerne dokumentationen. [6] [7]


Hvis du er nysgerrig om objekter på Windows, kan du også downloade og køre WinObj fra technet. [8]


Afhængigt af hvilken type projekt du arbejder på, dræber jeg et abstraktionslag omkring IO for blot at kunne udnytte hvad der er i Windows, men ikke i C-rundebiblioteker. Jeg skriver sjældent kode til forskellige platforme, der ikke går gennem den oprindelige API på hver platform (eller gennem en mellemliggende abstraktion).

Andre referencer 1


Du kan bare bruge Windows-filhåndtag. CreateFile, ReadFile og WriteFile. [9] [10] [11]


Dette svarer stort set til Unix-måden at gøre ting på. Masser af ting kan gøres ved hjælp af disse funktioner. Ikke stikket sind, men det er så tæt som du får!

Andre referencer 2


Ja, der er Win32-specifikke funktioner. Purister vil sige det gør din kode ikke-bærbar. Og det gør det! Men hvem bekymrer sig, du skriver et Windows-program.


OpenFile, CreateFile, osv. [12] [13] [14]