Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Öppnar en ström med fildelning.
Syntax
FILE *_fsopen(
const char *filename,
const char *mode,
int shflag
);
FILE *_wfsopen(
const wchar_t *filename,
const wchar_t *mode,
int shflag
);
Parameterar
filename
Namnet på filen som ska öppnas.
mode
Typ av åtkomst tillåten.
shflag
Typ av delning tillåts.
Returvärde
Var och en av dessa funktioner returnerar en pekare till strömmen. Ett null-pekarvärde anger ett fel. Om filename eller mode är eller är NULL en tom sträng anropar dessa funktioner den ogiltiga parameterhanteraren enligt beskrivningen i Parameterverifiering. Om körningen tillåts fortsätta returnerar dessa funktioner NULL och anger errno till EINVAL.
Mer information om dessa och andra felkoder finns i errno, _doserrno, _sys_errlistoch _sys_nerr.
Anmärkningar
Funktionen _fsopen öppnar filen som anges av filename som en ström och förbereder filen för efterföljande delad läsning eller skrivning, enligt definitionen i läget och shflag argumenten.
_wfsopen är en bred karaktärsversion av _fsopen; argumenten filename och mode som _wfsopen ska vara breda teckensträngar.
_wfsopen och _fsopen beter sig identiskt annars.
Teckensträngen mode anger vilken typ av åtkomst som begärs för filen, enligt följande tabell.
| Begrepp | Definition |
|---|---|
"r" |
Öppnas för läsning. Om filen inte finns eller inte kan hittas misslyckas _fsopen-anropet. |
"w" |
Öppnar en tom fil för skrivning. Om den angivna filen finns förstörs dess innehåll. |
"a" |
Öppnar för skrivning i slutet av filen (väntar); skapar filen först om den inte finns. |
"r+" |
Öppnar för både läsning och skrivning. (Filen måste finnas.) |
"w+" |
Öppnar en tom fil för både läsning och skrivning. Om den angivna filen finns förstörs dess innehåll. |
"a+" |
Öppnar för att läsa och lägga till; skapar filen först om den inte finns. |
Använd typerna "w" och "w+" med försiktighet, eftersom de kan förstöra befintliga filer.
När en fil öppnas med åtkomsttypen "a" eller "a+" sker alla skrivåtgärder i slutet av filen. Filpekaren kan flyttas med hjälp av fseek eller rewind, men den flyttas alltid tillbaka till slutet av filen innan någon skrivåtgärd utförs. Det innebär att befintliga data inte kan skrivas över. När åtkomsttypen "r+","w+" eller "a+" har angetts tillåts både läsning och skrivning (filen sägs vara öppen för uppdatering). Men när du växlar mellan läsning och skrivning måste det finnas en mellanliggande fsetpos, fseekeller rewind åtgärd. Den aktuella positionen kan anges för fsetpos åtgärden eller fseek om så önskas. Förutom ovanstående värden kan ett av följande tecken inkluderas i mode för att ange översättningsläget för nya rader och för filhantering.
| Begrepp | Definition |
|---|---|
t |
Öppnar en fil i textläge (översatt). I det här läget översätts vagnreturlinjematning (CR-LF) kombinationer till enradsfeeds (LF) på indata och LF-tecken översätts till CR-LF kombinationer av utdata. Dessutom tolkas CTRL+Z som ett filsluttecken vid indata. I filer som öppnats för läsning eller läsning/skrivning _fsopen söker du efter en CTRL+Z i slutet av filen och tar bort den, om möjligt. Den tas bort eftersom användning fseek och ftell för att flytta i en fil som slutar med en CTRL + Z kan orsaka fseek att bete sig felaktigt nära slutet av filen. |
b |
Öppnar en fil i binärt (oöversatt) läge. ovanstående översättningar ignoreras. |
D |
Anger en temporär fil som tas bort när den sista filpekaren till den stängs. |
R |
Anger att cachelagring är optimerat för, men inte begränsat till, slumpmässig åtkomst från disk. |
S |
Anger att cachelagring är optimerat för, men inte begränsat till, sekventiell åtkomst från disk. |
T |
Anger en fil som inte skrivs till disk om inte minnesbelastningen kräver det. |
Om t eller b inte anges i modedefinieras översättningsläget av standardlägesvariabeln _fmode. Om t eller b är prefix för argumentet misslyckas funktionen och returnerar NULL. En diskussion om text- och binärlägen finns i Fil-I/O för text och binärt läge.
Angående T och D:
-
Tundviker att skriva filen till disk så länge minnesbelastningen inte kräver det. Mer information finns iFILE_ATTRIBUTE_TEMPORARYi Filattributkonstanter, och även det här blogginlägget Det är bara tillfälligt. -
Danger en vanlig fil som skrivs till disk. Skillnaden är att den tas bort automatiskt när den stängs. Du kan kombineraTDför att få båda semantiken.
_fsopen och _wfsopen är Microsoft-specifika varianter av fopen. De ingår inte i ANSI-standarden. Om du inte behöver fildelning för en mer bärbar och säker funktion bör du överväga _wfopen_s eller fopen_s.
Argumentet shflag är ett konstant uttryck som består av en av följande manifestkonstanter, definierat i Share.h.
| Begrepp | Definition |
|---|---|
_SH_DENYNO |
Tillåter läs- och skrivåtkomst. |
_SH_DENYRD |
Nekar läsbehörighet till filen. |
_SH_DENYRW |
Nekar läs- och skrivåtkomst till filen. |
_SH_DENYWR |
Nekar skrivåtkomst till filen. |
Som standard är den här funktionens globala tillstånd begränsat till programmet. Information om hur du ändrar det här beteendet finns i Globalt tillstånd i CRT.
Allmän textrutinmappning
Tchar.h rutin |
_UNICODE och _MBCS inte definierat |
_MBCS definierad |
_UNICODE definierad |
|---|---|---|---|
_tfsopen |
_fsopen |
_fsopen |
_wfsopen |
Kravspecifikation
| Funktion | Obligatoriskt huvud | Valfria rubriker |
|---|---|---|
_fsopen |
<stdio.h> |
<share.h>För manifestkonstant för shflag parameter. |
_wfsopen |
<stdio.h> eller <wchar.h> |
<share.h>För manifestkonstant för shflag parameter. |
Exempel
// crt_fsopen.c
#include <stdio.h>
#include <stdlib.h>
#include <share.h>
int main( void )
{
FILE *stream;
// Open output file for writing. Using _fsopen allows us to
// ensure that no one else writes to the file while we are
// writing to it.
//
if( (stream = _fsopen( "outfile", "wt", _SH_DENYWR )) != NULL )
{
fprintf( stream, "No one else in the network can write "
"to this file until we are done.\n" );
fclose( stream );
}
// Now others can write to the file while we read it.
system( "type outfile" );
}
No one else in the network can write to this file until we are done.
Se även
Stream I/O-
fclose, _fcloseall
_fdopen, _wfdopen
ferror
_fileno
fopen, _wfopen
freopen, _wfreopen
_open, _wopen
_setmode
_sopen, _wsopen