fopen, _wfopen
Öffnet eine Datei.Sicherere Versionen dieser Funktionen sind verfügbar; finden Sie unter fopen_s, _wfopen_s.
FILE *fopen( const char *filename, const char *mode ); FILE *_wfopen( const wchar_t *filename, const wchar_t *mode );
Parameter
filename
Dateinamemode
Art des Zugriffs, der aktiviert ist.
Rückgabewert
Jede dieser Funktionen gibt einen Zeiger auf die geöffneten Datei zurück.Ein NULL-Zeiger-Wert gibt einen Fehler an.Wenn filename oder modeNULL oder eine leere Zeichenfolge ist, wird diese Funktionen den ungültigen Parameterhandler, der in Parametervalidierung beschrieben wird.Wenn die Ausführung zulässig ist, um fortzufahren, geben diese Funktionen NULL zurück und legen errno auf EINVAL fest.
Weitere Informationen finden Sie unter errno, _doserrno, _sys_errlist und _sys_nerr.
Hinweise
Die fopen-Funktion wird die Datei, die von filename angegeben wird._wfopen ist eine Breitzeichen-Version von fopen; die Argumente zu _wfopen sind Breitzeichen-Zeichenfolgen.Andernfalls verhalten sich _wfopen und fopen identisch.Derzeit mithilfe _wfopen hat keine Auswirkungen auf den codierten Zeichensatz, der im Dateistream verwendet wird.
fopen akzeptiert Pfade, die im Dateisystem zum Zeitpunkt der Ausführung gültig sind; fopen akzeptiert UNC-Pfade und Pfade, die zugeordnetes Netzlaufwerk betreffen, solange das System, das ausgeführt wird, der Code Zugriff auf die Freigabe oder zugeordnetes Laufwerk zum Zeitpunkt der Ausführung verfügt.Wenn Sie Pfade für fopen erstellen, überprüfen Sie, ob Laufwerk, Pfade oder Netzwerkfreigaben in der Ausführungsumgebung verfügbar sind.Sie können entweder Schrägstriche (/) oder umgekehrte Schrägstriche (\) als Verzeichnistrennzeichen in einem Pfad verwenden.
Überprüfen Sie immer den Rückgabewert, um festzustellen, ob der Zeiger NULL ist, bevor Sie alle anderen Vorgänge in der Datei ausführen.Wenn ein Fehler auftritt, wird die globale Variable errno wird festgelegt und verwendet werden, um bestimmte Fehlerinformationen abzurufen.Weitere Informationen finden Sie unter errno, _doserrno, _sys_errlist und _sys_nerr.
Unterstützung für Unicode
fopen Unterstützungs-Unicode-Dateistreams.Um eine Unicode-Datei zu öffnen, führen Sie ein ccs-Flag der die gewünschte Codierung zu fopen angibt, wie folgt.
fopen(&fp, "newfile.txt", "rw, ccs=encoding");
Zulässige Werte von encoding sind UNICODE, UTF-8 und UTF-16LE.
Wenn die Datei bereits vorhanden ist und zum Lesen oder das Anhängen geöffnet ist, die Bytereihenfolgemarkierung (BOM), wenn bestimmt sie vorhanden in der Datei, die Codierung.Das BOM-Codieren hat Vorrang gegenüber der Codierung, die vom ccs-Flag angegeben ist.Das ccs Code wird nur verwendet, wenn kein BOM vorhanden ist, oder die Datei eine neue Datei.
Hinweis |
---|
BOM-Erkennung gilt nur für Dateien, die im Unicode-Modus geöffnet sind (das heißt, durch Übergeben des ccs-Flags). |
In der folgenden Tabelle werden die Modi zusammengefasst, die für verschiedene ccs-Flags verwendet werden, die fopen und den Bytereihenfolgemarkierungen in der Datei angegeben werden.
Codierungen verwendet auf Grundlage ccs Flag und BOM
ccs-Flag |
Kein BOM (oder Datei) |
BOM: UTF-8 |
BOM: 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 |
Die Dateien, die zum Schreiben in Unicode-Modus geöffnet sind, haben BOM, das automatisch ihnen geschrieben wird.
Wenn mode "a, ccs=<encoding>" ist, versucht fopen zuerst, die Datei mit beiden Lese- und Schreibzugriff zu öffnen.Wenn dieses folgt, liest die Funktion BOM, um die Codierung für die Datei abrufen; Wenn dies fehlschlägt, wird die - Funktion die Standardcodierung für die Datei.In jedem Fall wird fopen dann die Datei mit lesegeschütztem Zugriff erneut.(Dies gilt für a nur Modus, nicht auf a+ Modus).
Zuordnung generische Textroutinen
TCHAR.H-Routine |
_UNICODE & _MBCS nicht definiert. |
_MBCS definiert |
_UNICODE definiert |
---|---|---|---|
_tfopen |
fopen |
fopen |
_wfopen |
Die Zeichenfolge mode gibt die Art des Zugriffs, der für die Datei angefordert wird, wie folgt aus.
"r"
Der wird zum Lesen.Wenn die Datei nicht vorhanden ist oder nicht gefunden werden kann, schlägt der Aufruf fopen aus."w"
Öffnet eine leere Datei zum Schreiben.Wenn die angegebene Datei vorhanden ist, wird der Inhalt zerstört."a"
Der wird zum Schreiben am Ende der Datei (Anfügen) ohne den Dateiende Markierung (EOF) zu entfernen, bevor neue Daten in die Datei geschrieben werden.Erstellt die Datei, wenn sie nicht vorhanden ist."r+"
Der wird für das Lesen und Schreiben.Die Datei muss vorhanden sein."w+"
Öffnet eine leere Datei für das Lesen und Schreiben.Wenn die Datei vorhanden ist, wird der Inhalt zerstört."a+"
Der wird zum Lesen und das Anfügen.Der anfügende Vorgang umfasst das Entfernen des EOF-Markers, bevor neue Daten in die Datei geschrieben werden.Der EOF-Marker wird nicht wiederhergestellt, nachdem das Schreiben vollständig ist.Erstellt die Datei, wenn sie nicht vorhanden ist.
Wenn eine Datei mit dem "a" Zugriffstyps oder des "a+" Zugriffstyps geöffnet wird, werden alle Schreibvorgänge am Ende der Datei auf.Der Dateizeiger kann, indem fseek oder rewind neu angeordnet werden, verwendet aber, wird immer wieder am Ende der Datei verschoben, bevor ein Schreibvorgang durchgeführt wird.Daher können vorhandene Daten nicht überschrieben werden.
Der "a" Modus nicht entfernt den EOF-Marker, bevor er zur Datei angefügt.Nach dem Hinzufügen, aufgetreten ist, zeigt der MS-DOS TYPbefehl nur Daten bis auf die Markierung der Vorlage EOF und keine Daten, die an die Datei angefügt werden.Bevor er an die Datei angefügt, entfernt der "a+" Modus den EOF-Marker.Nach dem angefügt hat zeigt der MS-DOS TYPbefehl alle Daten in der Datei an.Der "a+" Modus ist für das Anfügen an eine Streamdatei erforderlich, die mit dem Markierung STRG+Zs EOF beendet wird.
Wenn "r+", "w+" oder "a+" Zugriffstyp, angegeben wird, wird das Lesen und Schreiben zulässt (die Datei soll für "Update" geöffnet).Wenn Sie jedoch von den Lesen zum Schreiben wechseln, muss die Eingabeoperation einen EOF-Marker auftreten.Wenn kein EOF gibt, müssen Sie einen zwischenzeitlichen Aufruf einer Datei verwenden Funktion erhöhen.Die Datei, die Funktionen positioniert, sind fsetpos, fseek und rewind.Wenn Sie im Schreiben lesenden wechseln, müssen Sie einen zwischenzeitlichen Aufruf entweder zu fflush oder einer Datei verwenden Funktion erhöhen.
Zusätzlich zu den früheren Werten können die folgenden Zeichen zu mode angefügt werden, um den Übersetzungsmodus für Zeilenumbruchzeichen anzugeben.
- t
Öffnen Sie im Modus des Texts (übersetzt).In diesem Modus wird STRG+Z als EOF-Zeichen auf Eingabe interpretiert.In den Dateien, die zum Lesen/Schreiben mithilfe von "a+" geöffnet werden, überprüft fopen für STRG+Z am Ende der Datei und entfernt sie, sofern möglich.Dies geschieht, da die Anwendung möglicherweise von fseek und von ftell, sich innerhalb einer Datei zu navigieren, die mit STRG+Z beendet, fseek bewirkt, dass sich neben dem Ende der Datei falsch verhält.
Im Textmodus werden Wagenrücklauf/Zeilenvorschub-Kombinationen in einzelne Zeilenvorschübe auf Eingabe übersetzt, und Zeilenvorschubzeichen werden den Wagenrücklauf/Zeilenvorschub-Kombinationen auf Ausgabe übersetzt.Wenn eine Funktion von Unicode stream-I/O im Textmodus (Standard) funktioniert, die Quelle, oder Zielstream wird angenommen, dass eine Sequenz von Mehrbytezeichen zu sein.Daher konvertieren die Unicode-StreamEingabefunktionen Mehrbytezeichen zu den Breitzeichen (als ob durch einen Aufruf der mbtowc-Funktion).Aus demselben Grund konvertieren die Unicode Stream-ausgegebenen Funktionen Breitzeichen zu den Mehrbytezeichen (als ob durch einen Aufruf der wctomb-Funktion).
- b
Öffnen Sie im binären (unübersetzten) Modus; die Übersetzungen, die Wagenrückkehr- und Zeilenvorschubzeichen einbeziehen, werden unterdrückt.
Wenn t oder b nicht in mode angegeben ist, wird der Standardwert Übersetzungsmodus durch die globale Variable _fmode definiert.Wenn t oder b das Argument vorangestellt wird, lässt die Funktion und gibt NULL zurück.
Weitere Informationen dazu, wie Sie Text- und Binärdateimodi in Unicode und in Mehrbytem stream-I/O, finden Sie unter Text und Binärdatei-Modus-Datei E/A und Unicode-Stream E/A in den Text Binärdatei-Modi verwendet.
c
Aktivieren Sie das Commitflag für zugeordnete filename, sodass der Inhalt des Dateipuffers direkt auf den Datenträger geschrieben wird, wenn entweder fflush oder _flushall aufgerufen wird.n
Legen Sie das Commitflag für zugeordnete filename "NO-Commit" zurück. Dies ist die Standardeinstellung.Er überschreibt auch das globale Commitflag, wenn Sie das Programm mit COMMODE.OBJ verknüpfen.Der globale Commitflagsstandard ist "NO-Commit" es sei denn, Sie explizit das Programm mit COMMODE.OBJ verknüpfen (siehe Link-Optionen).N
Gibt an, dass die Datei nicht durch untergeordnete Prozesse geerbt wird.S
Gibt an, dass die Zwischenspeicherung für optimiert ist, aber nicht zu beschränkt, sequenzieller Zugriff von Datenträger an.R
Gibt an, dass die Zwischenspeicherung für optimiert wird, aber die nicht zu, wahlfreier Zugriff von Datenträger an.T
Gibt eine Datei an, wie temporär.Wenn möglich, wird sie nicht auf den Datenträger geleert.D
Gibt eine Datei an, wie temporär.Sie wird gelöscht, wenn der letzte Dateizeiger geschlossen wird.ccs=ENCODING
Gibt den codierten Zeichensatz an, um (UTF-8, UTF-16LE oder UNICODE) für diese Datei aus.Behalten Sie nicht angegeben, wenn Sie ANSI-Codieren soll.
Gültige Zeichen für mode-Objekts auf, das in fopen verwendet wird und _fdopen zu oflag-Argumenten, die in _open und in _sopen verwendet werden, wie folgt entsprechen.
Zeichen in der Moduszeichenfolge |
Entsprechender oflag-Wert für _open/_sopen |
---|---|
a |
_O_WRONLY | _O_APPEND(normalerweise _O_WRONLY | _O_CREAT | _O_APPEND) |
a+ |
_O_RDWR | _O_APPEND (normalerweise _O_RDWR | _O_APPEND | _O_CREAT) |
r |
_O_RDONLY |
r+ |
_O_RDWR |
w |
_O_WRONLY (normalerweise _O_WRONLY | _O_CREAT | _O_TRUNC) |
w+ |
_O_RDWR (normalerweise _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 |
Wenn Sie rb Modus verwenden, Code nicht portieren müssen und erwarten, die meisten einer großen Datei zu lesen oder nicht über Speichermenge haben, hielten möglicherweise auch, ob Arbeitsspeicher zugeordnet sind Win32-Dateien eine Option verwendet.
Anforderungen
Funktion |
Erforderlicher Header |
---|---|
fopen |
<stdio.h> |
_wfopen |
<stdio.h> oder <wchar.h> |
Weitere Informationen zur Kompatibilität, finden Sie unter Kompatibilität.
c, n, t, S, R, T und Optionen Dmode sind Microsoft-Erweiterungen für fopen und _fdopen und sollten nicht verwendet werden, wo ANSI-Portabilität erforderlich ist.
Beispiel
Das folgende Programm öffnet zwei Dateien.Es fclose verwendet, um die erste Datei und _fcloseall zu schließen, um alle verbleibenden Dateien zu schließen.
// crt_fopen.c
// compile with: /W3
// 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 )
{
int numclosed;
// Open for read (will fail if file "crt_fopen.c" does not exist)
if( (stream = fopen( "crt_fopen.c", "r" )) == NULL ) // C4996
// Note: fopen is deprecated; consider using fopen_s instead
printf( "The file 'crt_fopen.c' was not opened\n" );
else
printf( "The file 'crt_fopen.c' was opened\n" );
// Open for write
if( (stream2 = fopen( "data2", "w+" )) == NULL ) // C4996
printf( "The file 'data2' was not opened\n" );
else
printf( "The file 'data2' was opened\n" );
// Close stream if it is not NULL
if( stream)
{
if ( fclose( stream ) )
{
printf( "The file 'crt_fopen.c' was not closed\n" );
}
}
// All other files are closed:
numclosed = _fcloseall( );
printf( "Number of files closed by _fcloseall: %u\n", numclosed );
}
Das folgende Programm erstellt eine Datei (oder ein überschreibt, sofern vorhanden), im Textmodus, der Unicode-Codierung verfügt.Anschließend schreibt zwei Zeichenfolgen in die Datei und schließt die Datei.Die Ausgabe ist eine Datei, die _wfopen_test.xml ", die die Daten aus dem Ausgangsteil enthält.
// crt__wfopen.c
// compile with: /W3
// This program creates a file (or overwrites one if
// it exists), in text mode using Unicode encoding.
// It then writes two strings into the file
// and then closes the file.
#include <stdio.h>
#include <stddef.h>
#include <stdlib.h>
#include <wchar.h>
#define BUFFER_SIZE 50
int main(int argc, char** argv)
{
wchar_t str[BUFFER_SIZE];
size_t strSize;
FILE* fileHandle;
// Create an the xml file in text and Unicode encoding mode.
if ((fileHandle = _wfopen( L"_wfopen_test.xml",L"wt+,ccs=UNICODE")) == NULL) // C4996
// Note: _wfopen is deprecated; consider using _wfopen_s instead
{
wprintf(L"_wfopen failed!\n");
return(0);
}
// Write a string into the file.
wcscpy_s(str, sizeof(str)/sizeof(wchar_t), L"<xmlTag>\n");
strSize = wcslen(str);
if (fwrite(str, sizeof(wchar_t), strSize, fileHandle) != strSize)
{
wprintf(L"fwrite failed!\n");
}
// Write a string into the file.
wcscpy_s(str, sizeof(str)/sizeof(wchar_t), L"</xmlTag>");
strSize = wcslen(str);
if (fwrite(str, sizeof(wchar_t), strSize, fileHandle) != strSize)
{
wprintf(L"fwrite failed!\n");
}
// Close the file.
if (fclose(fileHandle))
{
wprintf(L"fclose failed!\n");
}
return 0;
}
.NET Framework-Entsprechung
System::IO::FileStream::FileStream