(0) exportieren Drucken
Alle erweitern
Uhr
div
eof
Erweitern Minimieren
Dieser Artikel wurde maschinell übersetzt. Bewegen Sie den Mauszeiger über die Sätze im Artikel, um den Originaltext anzuzeigen. Weitere Informationen
Übersetzung
Original
Dieser Artikel wurde noch nicht bewertet - Dieses Thema bewerten.

fopen_s, _wfopen_s

Öffnet eine Datei. Diese Versionen von Fopen, _wfopen Sicherheitsverbesserungen verfügen, wie in beschrieben Sicherheitsfunktionen in der CRT.

errno_t fopen_s( 
   FILE** pFile,
   const char *filename,
   const char *mode 
);
errno_t _wfopen_s(
   FILE** pFile,
   const wchar_t *filename,
   const wchar_t *mode 
);
[out]pFile

Ein Zeiger auf den Dateizeiger an, der den Zeiger auf der geöffneten Datei erhalten.

[in]filename

Dateiname.

[in]mode

Erlaubter Zugriffstyp.

0, wenn erfolgreich, andernfalls ein Fehlercode. Finden Sie unter errno, _doserrno, _sys_errlist und _sys_nerrWeitere Informationen zu diesen Fehlercodes.

Fehlerbedingungen

pFile

filename

mode

Rückgabewert

InhaltpFile

NULL

beliebig

beliebig

EINVAL

unverändert

beliebig

NULL

beliebig

EINVAL

unverändert

beliebig

beliebig

NULL

EINVAL

unverändert

Dateien, die von geöffnet werden fopen_sund _wfopen_ssind nicht freigegeben werden. Wenn eine Datei freigegeben werden muss, verwenden Sie _fsopen, _wfsopenmit der entsprechenden Freigabe Modus-Konstante – z. B. _SH_DENYNOfür den Austausch von Lese-/Schreibzugriff.

Die fopen_s-Funktion öffnet die durch filename angegebene Datei. _wfopen_s eine Breitzeichen-Version von fopen_s; die Argumente für _wfopen_sWide-Character-Zeichenfolgen werden. _wfopen_s und fopen_s verhalten sich ansonsten identisch.

fopen_s Pfade, die zum Zeitpunkt der Ausführung im Dateisystem werden akzeptiert. UNC-Pfade und Pfade, bei denen zugeordnete Netzlaufwerke werden von akzeptiert fopen_s, solange das System, das der Code ausgeführt wird, Zugriff auf die Freigabe hat oder Netzlaufwerk zum Zeitpunkt der Ausführung verbundenen. Beim Erstellen von Pfaden für fopen_s, keine Annahmen über die Verfügbarkeit der Laufwerke, Pfade, oder Netzwerkfreigaben in der Ausführungsumgebung. Schrägstriche (/) oder umgekehrte Schrägstriche (\) können als Trennzeichen Verzeichnis in einem Pfad.

Diese Funktionen überprüfen ihre Parameter. Wenn pFile, filename, oder modeist ein null-Zeiger, diese Funktionen generieren eine Ausnahme Ungültiger Parameter wie unter Parametervalidierung.

Überprüfen Sie stets den Rückgabewert, um zu sehen, wenn die Funktion erfolgreich ausgeführt wurde, bevor Sie weiteren Operationen für die Datei ausführen. Der Fehlercode wird zurückgegeben, wenn ein Fehler auftritt, und die globale Variable errnofestgelegt ist. Weitere Informationen finden Sie unter errno, _doserrno, _sys_errlist und _sys_nerr.

Unicode-Unterstützung

fopen_s unterstützt Unicode-Dateistreams. Öffnen Sie eine neue oder vorhandene Unicode-Datei übergeben ein ccsFlags, die angibt, auf die gewünschte Codierung fopen_s:

fopen_s(&fp, "newfile.txt", "rw, ccs= encoding ");

Zulässige Werte von encodingwerden UNICODE, UTF-8, und UTF-16LE. Wenn es kein Wert angegeben ist, für die encoding, fopen_sANSI-Codierung verwendet.

Wenn die Datei bereits vorhanden ist und für das Lesen oder Anfügen von geöffnet wird, bestimmt die Byte Order Mark (BOM), wenn in der Datei die Codierung. Die Stückliste Codierung Vorrang vor der Codierung, die durch angegeben ist die ccsFlag. Die ccs-Codierung wird nur verwendet, wenn keine Stückliste vorhanden ist oder wenn die Datei eine neue Datei ist.

Hinweis Hinweis

Stückliste-Nachweis gilt nur für Dateien, die im Unicode-Modus geöffnet werden. d. h. durch Übergeben der ccsFlag.

Die folgende Tabelle fasst die Modi für die verschiedenen ccsFlags, die zugewiesen werden fopen_sund Markierungen für die Bytereihenfolge in der Datei.

Codierungen verwendet basierend auf ccs-Flag und Stückliste

ccsKennzeichen

Keine Stückliste (oder eine neue Datei)

STÜCKLISTE: UTF-8

STÜCKLISTE: UTF-16

UNICODE

UTF-16LE

UTF-8

UTF-16LE

UTF-8

UTF-8

UTF-8

UTF-16LE

UTF-16LE

UTF-16LE

UTF-8

UTF-16LE

Dateien, die geöffnet werden, zum Schreiben im Unicode-Modus haben eine Stückliste automatisch geschrieben.

Wenn modeist "a, ccs=<encoding>", fopen_sversucht zunächst, die Datei mit Lese- und Schreibzugriff öffnen. Wenn erfolgreich, liest die Funktion die Stückliste bestimmt die Codierung für die Datei. Wenn dies nicht gelingt, verwendet die Funktion die Standardcodierung für die Datei. In beiden Fällen fopen_söffnet dann die Datei mit nur-schreiben Zugriff erneut. (Dies gilt für aModus nur, nicht a+.)

Zuordnungen für generischen Text Routine

TCHAR.H-routine

_UNICODE & _MBCS nicht definiert

_MBCS definiert

Wenn _UNICODE definiert ist

_tfopen_s

fopen_s

fopen_s

_wfopen_s

Die Zeichenfolge modeGibt die Art des Zugriffs, der wie folgt für die Datei angefordert wird.

"r"

Öffnet zum Lesen. Wenn die Datei nicht vorhanden ist oder kann nicht gefunden werden, die fopen_sAufrufen fehlschlägt.

"w"

Öffnet eine leere Datei zum Schreiben. Wenn die Datei vorhanden ist, werden dessen Inhalt gelöscht.

"a"

Öffnet für Schreiben am Ende der Datei (Anfügen), ohne den EOF-Marker entfernen, bevor Sie neue Daten in die Datei schreiben. Erstellt die Datei existiert nicht.

"r+"

Wird für Lese- und Schreibzugriff geöffnet. (Die Datei muss vorhanden sein.)

"w+"

Öffnet eine leere Datei zum Lesen und Schreiben. Wenn die Datei vorhanden ist, werden dessen Inhalt gelöscht.

"a+"

Öffnet zum Lesen und Anfügen. Anfügen Vorgang umfasst das Entfernen der EOF-Marke, bevor neue Daten in die Datei geschrieben und der EOF-Marker wiederhergestellt wird, nachdem der Schreibvorgang abgeschlossen ist. Erstellt die Datei existiert nicht.

Beim Öffnen einer Datei mit der "a"oder "a+"Zugriffstyp, write-Vorgänge auftreten am Ende der Datei. Der Dateizeiger kann neu positioniert werden, mithilfe von fseekoder rewind, jedoch wird immer an das Ende der Datei vor dem Schreiben Operation wird durchgeführt, so dass vorhandene Daten nicht überschrieben werden können.

Der "a" Modus entfernt den EOF-Marker nicht, bevor er die Datei erweitert. Nach dem Anhängen aufgetreten ist, zeigt des Typ des MS-DOS-Befehls nur Daten bis zu der ursprünglichen EOF-Marker und keine Daten, die an die Datei angefügt ist. Der "a+" Modus entfernt den EOF-Marker, bevor er die Datei erweitert. Nach dem Anfügen zeigt der MS-DOS-Befehl TYPE alle Daten der Datei an. Die "a+""ist erforderlich zum Anfügen an ein Streamingdatei, die mit STRG + Z EOF-Marker beendet ist.

Wenn die "r+","w+",oder "a+"Zugriff angegeben wird, sind sowohl lesen und Schreiben zulässig. (Die Datei soll für "Update" geöffnet werden.) Wenn Sie lesen schreiben wechseln, muss die input-Operation EOF-Marker auftreten. Ist keine EOF, müssen Sie einen zwischenzeitlichen Aufruf einer Funktion Datei Positionierung verwenden. Die Datei Positionierung Funktionen sind fsetpos, fseek, und rewind. Beim Wechseln vom Lesen Schreiben, müssen Sie einen zwischenzeitlichen Aufruf verwenden fflushoder einer Funktion Datei Positionierung.

Zusätzlich zu den oben aufgeführten Werte können die folgenden Zeichen enthalten sein modean den NAT-Modus für neue Zeilenumbruchzeichen:

t

Öffnet im (übersetzten) Textmodus. In diesem Modus wird STRG + Z als EOF-Zeichen bei der Eingabe interpretiert. In für das Lesen und Schreiben mit geöffneten Dateien "a+", fopen_seine STRG + Z am Ende der Datei überprüft und entfernt sie, sofern möglich. Dies ist notwendig, da mit fseekund ftellVerschieben innerhalb einer Datei, die mit STRG + Z beendet kann dazu führen, dass fseeknicht ordnungsgemäß Verhalten am Ende der Datei.

Auch im Textmodus, Wagenrücklauf und Zeilenvorschub Kombinationen in einzelnen Zeilenvorschübe bei der Eingabe umgesetzt werden, und Zeilenvorschubzeichen, Wagenrücklauf und Zeilenvorschub Kombinationen bei der Ausgabe übersetzt. Wenn eine Unicode-Stream-I/O-Funktion arbeitet im Textmodus (Standard), der Quell- oder Zieldatenstrom wird eine Folge von multibyte-Zeichen werden angenommen. Die Unicode-Stream Input Funktionen daher in Breitzeichen Mehrbyte-Zeichen konvertieren (wie durch einen Aufruf der mbtowcFunktion). Aus dem gleichen Grund die Unicode-Streamausgabe Funktionen Breitzeichen in multibyte-Zeichen konvertieren (wie durch einen Aufruf der wctombFunktion).

b

Öffnet im binären (unübersetzten) Modus; die Übersetzungen inklusive Wagenlauf- und Zeilenvorschubzeichen werden unterdrückt.

Wenn t oder b nicht in mode angegeben sind, wird der Standard-Übersetzungsmodus durch die globale Variable _fmode definiert. Wenn t oder b dem Argument vorangestellt sind, schlägt die Funktion fehl und gibt NULL zurück.

Weitere Informationen zur Verwendung von Text- und binäre Modi in Unicode und multibyte-Stream-e/A finden Sie unter Text und Binary Mode Dateieingabe und Unicode-Stream e/a in Text und Binary Modi.

c

Aktivieren Sie die Commit-Flag für die zugeordnete filename, damit der Inhalt des Dateipuffers direkt geschrieben werden, wenn einer der beiden Datenträger fflushoder _flushallheißt.

n

Setzt das Commitflag für den zugeordneten filename auf "no-commit" zurück. Dies ist das Standardverhalten. Es überschreibt auch das globale Commitflag, wenn Sie das Programm mit COMMODE.OBJ binden. Der globale Commit Flag Standardwert ist "Nein-Commit" Wenn Sie das Programm mit KOMMODE explizit verknüpft.OBJ (siehe Linkoptionen).

N

Gibt an, dass die Datei nicht von untergeordneten Prozessen geerbt wird.

S

Gibt an, dass die Zwischenspeicherung für sequenziellen Datenträgerzugriff optimiert ist, aber nicht darauf beschränkt ist.

R

Gibt an, dass die Zwischenspeicherung für wahlfreien Datenträgerzugriff optimiert ist, aber nicht darauf beschränkt ist.

T

Gibt eine temporäre Datei an. Wenn möglich, wird es nicht geleert auf der Festplatte.

D

Gibt eine temporäre Datei an. Es wird gelöscht, wenn der Zeiger der letzte geschlossen wird.

ccs=ENCODING

Geben Sie den codierten Zeichensatz (UTF-8, UTF-16LE und UNICODE) für diese Datei verwendet. Lassen Sie dies angegeben werden, wenn Sie ANSI-Codierung werden soll.

Gültige Zeichen für die modeZeichenfolge verwendet wird, fopen_sund _fdopenentsprechen den oflagArgumente verwendet werden, _open und _sopenwie folgt.

Zeichen in Zeichenfolge

Entsprechende oflagWert für _open/_sopen

a

_O_WRONLY | _O_APPEND (in der Regel_O_WRONLY | _O_CREAT |_O_APPEND)

a+

_O_RDWR | _O_APPEND (in der Regel_O_RDWR | _O_APPEND | _O_CREAT )

r

_O_RDONLY

r+

_O_RDWR

w

_O_WRONLY (in der Regel_O_WRONLY |_O_CREAT | _O_TRUNC)

w+

_O_RDWR (meistens _O_RDWR | _O_CREAT | _O_TRUNC)

b

_O_BINARY

t

_O_TEXT

c

Keine

n

Keine

S

_O_SEQUENTIAL

R

_O_RANDOM

T

_O_SHORTLIVED

D

_O_TEMPORARY

ccs=UNICODE

_O_WTEXT

ccs=UTF-8

_O_UTF8

ccs=UTF-16LE

_O_UTF16

Bei Verwendung von rb-Modus den Code, und erwarten, dass viele der Datei lesen und/oder Netzwerkleistung egal, zugeordneten Speichers Win32-Dateien möglicherweise auch eine Option.

Funktion

Erforderlicher Header

fopen_s

< stdio.h >

_wfopen_s

< stdio.h > oder < wchar.h >

Weitere Informationen zur Kompatibilität finden Sie unter Kompatibilität in der Einführung.

Bibliotheken

Alle Versionen der C-Laufzeitbibliotheken.

Die c, n, und t  modeOptionen sind Erweiterungen von Microsoft für fopen_sund _fdopenund sollte nicht dem ANSI-Portabilität gewünscht wird verwendet werden.

// crt_fopen_s.c
// This program opens two files. It uses
// fclose to close the first file and
// _fcloseall to close all remaining files.
 

#include <stdio.h>

FILE *stream, *stream2;

int main( void )
{
   errno_t err;

   // Open for read (will fail if file "crt_fopen_s.c" does not exist)
   err  = fopen_s( &stream, "crt_fopen_s.c", "r" );
   if( err == 0 )
   {
      printf( "The file 'crt_fopen_s.c' was opened\n" );
   }
   else
   {
      printf( "The file 'crt_fopen_s.c' was not opened\n" );
   }

   // Open for write 
   err = fopen_s( &stream2, "data2", "w+" );
   if( err == 0 )
   {
      printf( "The file 'data2' was opened\n" );
   }
   else
   {
      printf( "The file 'data2' was not opened\n" );
   }

   // Close stream if it is not NULL 
   if( stream )
   {
      err = fclose( stream );
      if ( err == 0 )
      {
         printf( "The file 'crt_fopen_s.c' was closed\n" );
      }
      else
      {
         printf( "The file 'crt_fopen_s.c' was not closed\n" );
      }
   }

   // All other files are closed:
   int numclosed = _fcloseall( );
   printf( "Number of files closed by _fcloseall: %u\n", numclosed );
}

  The file 'crt_fopen_s.c' was opened 
The file 'data2' was opened
Number of files closed by _fcloseall: 1
Fanden Sie dies hilfreich?
(1500 verbleibende Zeichen)
Vielen Dank für Ihr Feedback.

Community-Beiträge

HINZUFÜGEN
Anzeigen:
© 2014 Microsoft. Alle Rechte vorbehalten.