_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_errlist
und _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 rewind
verschoben 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
, fseek
oder 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 mode
wird, wird der Übersetzungsmodus durch die Standardmodusvariable _fmode
definiert. Wenn dem Argument t
oder b
vorangestellt wird, schlägt die Funktion fehl und gibt NULL
zurü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 inFILE_ATTRIBUTE_TEMPORARY
Datei-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 kombinierenTD
, 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. Wie Sie dieses Verhalten ändern, erfahren Sie unter Globaler Status in der CRT.
Mapping generischer Textroutinen
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