_fsopen, _wfsopen

Ein Stream mit Dateifreigabe öffnen

Syntax

FILE *_fsopen(
   const char *filename,
   const char *mode,
   int shflag
);
FILE *_wfsopen(
   const wchar_t *filename,
   const wchar_t *mode,
   int shflag
);

Parameter

filename
Name der zu öffnenden Datei.

mode
Zugriffstyp zulässig.

shflag
Freigabetyp erlaubt.

Rückgabewert

Jede dieser Funktionen gibt einen Zeiger auf den Stream zurück. Ein NULL-Zeigerwert gibt einen Fehler an. Wenn filename oder eine leere Zeichenfolge istNULL, mode rufen diese Funktionen den ungültigen Parameterhandler auf, wie in der Parameterüberprüfung beschrieben. Wenn die weitere Ausführung zugelassen wird, geben diese Funktionen NULL zurück und stellen errno auf EINVAL ein.

Weitere Informationen zu diesen und anderen Fehlercodes finden Sie unter , , _doserrno, _sys_errlistund _sys_nerr.errno

Hinweise

Die Funktion _fsopen öffnet die durch filename als Stream angegebene Datei und bereitet sie zur Lese- oder Schreibfreigabe vor, wie durch Modus und shflag Argumente definiert. _wfsopen ist eine Breitzeichenversion von _fsopen. Die filename und mode Argumente für _wfsopen sind Zeichenfolgen mit Breitzeichen. _wfsopen und _fsopen verhalten sich andernfalls identisch.

Die Zeichenfolge mode gibt den Typ des Zugriffs, der für die Datei angefordert wird, wie in der folgenden Tabelle gezeigt, an.

Begriff Definition
"r" Öffnet zum Lesen. Wenn die Datei nicht vorhanden ist oder nicht gefunden werden kann, schlägt der _fsopen Aufruf fehl.
"w" Öffnet eine leere Datei zum Schreiben. Wenn die angegebene Datei vorhanden ist, wird ihr Inhalt zerstört.
"a" Wird zum Schreiben am Ende der Datei geöffnet (Anfügen); erstellt die Datei zuerst, wenn sie nicht vorhanden ist.
"r+" Öffnet sowohl zum Lesen als auch zum Schreiben. (Die Datei muss vorhanden sein.)
"w+" Öffnet eine leere Datei zum Lesen und Schreiben. Wenn die angegebene Datei vorhanden ist, wird ihr Inhalt zerstört.
"a+" Wird zum Lesen und Anfügen geöffnet; erstellt die Datei zuerst, wenn sie nicht vorhanden ist.

Verwenden Sie die Typen "w" und "w+" mit Bedacht, da sie vorhandene Dateien zerstören können.

Wenn eine Datei mit dem Zugriffstyp "a" oder "a+" geöffnet wird, treten alle Schreibvorgänge am Ende der Datei auf. Der Dateizeiger kann mithilfe fseek oder rewindverschoben werden, wird jedoch immer wieder an das Ende der Datei verschoben, bevor ein Schreibvorgang ausgeführt wird. Daher können vorhandene Daten nicht überschrieben werden. Wenn der Zugriffstyp "r+", "w+" oder "a+" angegeben ist, sind sowohl Lese- als auch Schreibzugriff zulässig (die Datei wird für die Aktualisierung geöffnet). Beim Wechseln zwischen Lese- und Schreibvorgängen muss es jedoch einen dazwischen liegenden fsetpos, fseekoder rewind einen Vorgang geben. Bei Bedarf kann die aktuelle Position für den Vorgang fsetpos oder fseek angegeben werden. Zusätzlich zu den oben aufgeführten Werten kann eines der folgenden Zeichen in mode enthalten sein, um den Übersetzungsmodus für neue Zeilen anzugeben und für Dateiverwaltung.

Begriff Definition
t Öffnet eine Datei im Textmodus (übersetzt). In diesem Modus werden Wagenrücklaufeinzugskombinationen (CR-LF) in Einzelzeilenfeeds (Single Line Feeds, LF) bei Eingaben übersetzt, und LF-Zeichen werden in CR-LF-Kombinationen für die Ausgabe übersetzt. Außerdem wird STRG+Z bei der Eingabe als EOF-Zeichen interpretiert. In den Dateien, die für das Lesen oder Lesen/Schreiben geöffnet sind, überprüft _fsopen die Datei auf STRG+Z am Dateiende, und entfernt sofern möglich die Markierung. Es wird entfernt, da die Verwendung fseek und ftell das Verschieben in einer Datei, die mit strg+Z endet, dazu führen fseek kann, dass sich das Verhalten am Ende der Datei nicht ordnungsgemäß verhält.
b Öffnet im (unübersetzten) Binärmodus eine Datei; die oben genannten Übersetzungen werden unterdrückt.
D Gibt eine temporäre Datei an, die beim Schließen des letzten Dateizeigers gelöscht wird.
R Gibt an, dass das Zwischenspeichern für den zufälligen Zugriff vom Datenträger optimiert, aber nicht darauf beschränkt ist.
S Gibt an, dass das Zwischenspeichern für den sequenziellen Zugriff vom Datenträger optimiert, aber nicht darauf beschränkt ist.
T Gibt eine Datei an, die nicht auf den Datenträger geschrieben wird, es sei denn, der Arbeitsspeicherdruck erfordert sie.

Wenn t oder b nicht angegeben modewird, wird der Übersetzungsmodus durch die Standardmodusvariable _fmodedefiniert. Wenn dem Argument t oder b vorangestellt wird, schlägt die Funktion fehl und gibt NULLzurück. Eine Erläuterung der Text- und Binärmodi finden Sie unter "Text- und Binärmodusdatei-E/A".

Bezüglich T und D:

  • T verhindert, dass die Datei auf den Datenträger geschrieben wird, solange kein Arbeitsspeicherdruck erforderlich ist. Weitere Informationen finden Sie in FILE_ATTRIBUTE_TEMPORARYDatei-Attributkonstanten und auch in diesem Blogbeitrag Es ist nur temporär.
  • D Gibt eine normale Datei an, die auf den Datenträger geschrieben wird. Der Unterschied besteht darin, dass sie beim Schließen automatisch gelöscht wird. Sie können kombinieren TD , um beide Semantik abzurufen.

_fsopen und _wfsopen sind microsoftspezifische Varianten von fopen. Sie sind nicht Teil des ANSI-Standards. Für eine tragbarere und sicherere Funktion, wenn Sie keine Dateifreigabe benötigen, erwägen _wfopen_s oder fopen_s.

Das Argument shflag ist ein konstanter Ausdruck, der aus einer der folgenden Manifestkonstanten besteht, die in Share.h.

Begriff Definition
_SH_DENYNO Gestattet Lese- und Schreibzugriff.
_SH_DENYRD Verweigert den Lesezugriff auf die Datei.
_SH_DENYRW Verweigert den Lese- und Schreibzugriff auf die Datei.
_SH_DENYWR Verweigert den Lesezugriff auf die Datei.

Standardmäßig gilt der globale Zustand dieser Funktion für die Anwendung. Informationen zum Ändern dieses Verhaltens finden Sie im Global state in the CRT.

Generische Textroutinzuordnungen

Tchar.h Routine _UNICODE und _MBCS nicht definiert _MBCS Definiert _UNICODE Definiert
_tfsopen _fsopen _fsopen _wfsopen

Anforderungen

Funktion Erforderlicher Header Optionale Header
_fsopen <stdio.h> <share.h>

Für die Manifestkonstante für shflag Parameter.
_wfsopen <stdio.h> oder <wchar.h> <share.h>

Für die Manifestkonstante für shflag Parameter.

Beispiel

// 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.

Siehe auch

Stream-E/A
fclose, _fcloseall
_fdopen, _wfdopen
ferror
_fileno
fopen, _wfopen
freopen, _wfreopen
_open, _wopen
_setmode
_sopen, _wsopen