freopen, _wfreopen
Ponownie przypisuje wskaźnika pliku.Bardziej bezpieczne wersje tych funkcji są dostępne w freopen_s, _wfreopen_s.
FILE *freopen(
const char *path,
const char *mode,
FILE *stream
);
FILE *_wfreopen(
const wchar_t *path,
const wchar_t *mode,
FILE *stream
);
Parametry
path
Ścieżka do nowego pliku.mode
Dozwolony typ dostępu.stream
Wskaźnik na FILE strukturę.
Wartość zwracana
Każda z tych funkcji zwraca wskaźnik do nowo otwarty plik.Jeśli wystąpi błąd, oryginalny plik musi być zamknięty i funkcja zwraca NULL wartość wskaźnika.Jeśli path, mode, lub stream jest pusty wskaźnik, lub jeśli filename jest ciągiem pustym tych funkcji Wywołaj obsługę nieprawidłowy parametr, zgodnie z opisem w Sprawdzanie poprawności parametru.Jeśli wykonanie może być kontynuowane, te funkcje ustawiają errno jako EINVAL i zwracają NULL.
Aby uzyskać więcej informacji na temat tych i innych kodów błędu, zobacz _doserrno, errno, _sys_errlist, and _sys_nerr.
Uwagi
Istnieją bardziej bezpieczne wersje tych funkcji, zobacz freopen_s, _wfreopen_s.
freopen Funkcja zamyka plik aktualnie skojarzone z stream i ponownie przypisuje stream do pliku określonego przez path*.*_wfreopen jest wersją szeroko charakter _freopen; path i mode argumentów do _wfreopen są ciągi znaków wide._wfreopen i _freopen zachowują się identycznie w innych przypadkach.
Rutynowe mapowania zwykłego tekstu
Procedura Tchar.h |
_UNICODE & _MBCS nie zdefiniowano |
_MBCS zdefiniowano |
_UNICODE zdefiniowany |
---|---|---|---|
_tfreopen |
freopen |
freopen |
_wfreopen |
freopenjest zazwyczaj używany do przekierowania wstępnie otwarte pliki stdin, stdout, i stderr do plików określonych przez użytkownika.Nowy plik skojarzony z stream jest otwierany z mode*,* który to ciąg znaków określający typ dostępu zażądał pliku w następujący sposób:
"r"
Otwarty do odczytu.Jeśli plik nie istnieje lub nie można go znaleźć, wywołanie funkcji freopen kończy się niepowodzeniem."w"
Otwiera pusty plik do zapisu.Jeżeli dany plik istnieje, jego zawartość zostaną zniszczone."a"
Zostanie otwarty do zapisu na końcu pliku (dołączanie) bez usuwania znacznik EOF przed zapisaniem nowych danych do pliku; najpierw tworzy plik, jeśli nie istnieje."r+"
Otwiera zarówno do odczytu jak i do zapisu. (Plik musi istnieć)."w+"
Otwiera pusty plik zarówno do odczytu jak i do zapisu.Jeżeli dany plik istnieje, jego zawartość zostaną zniszczone."a+"
Otwiera do czytania i dołączanie; dołączanie operacji obejmuje usunięcie znacznik EOF, zanim nowe dane są zapisywane do pliku i znacznik EOF zostanie przywrócona po zakończeniu pisania; najpierw tworzy plik, jeśli nie istnieje.
Użycie "w" i "w+" typy z rozwagą, ponieważ mogą zniszczyć istniejących plików.
Przy otwieraniu pliku z "a" lub "a+" uzyskać dostęp typu, wszystko zostało napisane operacji miejsce na końcu pliku.Chociaż wskaźnik pliku może być przeniesiony za pomocą fseek lub rewind, wskaźnik pliku jest zawsze przenoszony z powrotem do końca pliku było wpisywanie dowolną czynność jest przeprowadzana.W efekcie nie można odświeżyć danych istniejących.
Tryb "a" nie usuwa znacznika EOF przed wykonaniem operacji dołączenia na pliku.Po nastąpieniu dołączenie polecenia systemu MS-DOS wpisz tylko pokazuje dane do oryginalnego znacznik EOF i nie wszystkie dane dołączane do pliku.Tryb "a+" usuwa znacznik EOF przed wykonaniem operacji dołączania na pliku.Po operacji dołączania, polecenie MS-DOS TYPE pokazuje wszystkie dane w pliku."a+" Tryb jest wymagany do dołączania do pliku strumienia, który jest zakończony ze znacznikiem EOF CTRL + Z.
Gdy "r+", "w+", lub "a+" jest określony typ dostępu, zarówno do czytania i pisania są dozwolone (plik mówi się, że otwarta do "update").Jednak podczas przełączania między czytanie i pisanie, musi istnieć interwencji fsetpos, fseek, lub do tyłu operacji.Bieżąca pozycja mogą być określone dla fsetpos lub fseek operacji, w razie potrzeby.Oprócz powyższych wartości, jeden z następujących znaków może być zawarty w mode ciąg, aby określić tryb translacji dla nowych wierszy.
t
Otwórz w tekście (translacji) tryb; karetki (CR-LF) argument kombinacje są tłumaczone na pojedynczy znak wysuwu wiersza (LF) znaki w danych wejściowych; Znaki wysuwu wiersza są tłumaczone na CR-LF kombinacji na wyjściu.Ponadto CTRL + Z jest interpretowana jako znak końca pliku na wejściu.W przypadku plików otwartych do odczytu lub do zapisywania i odczytywania z "a+", biblioteki wykonawczej sprawdza CTRL + Z końcem pliku i usuwa je, jeśli to możliwe.To zrobić, ponieważ za pomocą fseek i ftell w obrębie pliku może spowodować fseek będzie działać nieprawidłowo w pobliżu koniec pliku.t Opcja jest rozszerzenie Microsoft, które nie powinny być używane gdzie mobilność ANSI jest pożądane.b
Otwórz w trybie binarnym (nieprzetłumaczony); Powyższe tłumaczenia są pomijane.
Jeśli wartość t lub b nie jest podana w parametrze mode, domyślny tryb translacji jest zdefiniowany przez zmienną globalną _fmode.Jeśli wartość t lub b poprzedza argument, funkcja kończy się niepowodzeniem i zwraca NULL.
Omówienie tekstowe i binarne trybów, zobacz tekstu i binarny tryb operacji We/Wy.
Wymagania
Funkcja |
Wymagany nagłówek |
---|---|
freopen |
<stdio.h> |
_wfreopen |
<stdio.h> lub <wchar.h> |
Konsola nie jest obsługiwana w aplikacjach Windows Store.Standardowe uchwyty strumienia powiązane z konsolą—stdin, stdout, i stderr—muszą zostać przekierowane zanim będą wykorzystane przez funkcje środowiska uruchomieniowego C w aplikacjach Windows Store.Dodatkowe informacje o zgodności – zobacz: Zgodność.
Przykład
// crt_freopen.c
// compile with: /W3
// This program reassigns stderr to the file
// named FREOPEN.OUT and writes a line to that file.
#include <stdio.h>
#include <stdlib.h>
FILE *stream;
int main( void )
{
// Reassign "stderr" to "freopen.out":
stream = freopen( "freopen.out", "w", stderr ); // C4996
// Note: freopen is deprecated; consider using freopen_s instead
if( stream == NULL )
fprintf( stdout, "error on freopen\n" );
else
{
fprintf( stdout, "successfully reassigned\n" ); fflush( stdout );
fprintf( stream, "This will go to the file 'freopen.out'\n" );
fclose( stream );
}
system( "type freopen.out" );
}