Udostępnij za pośrednictwem


freopen_s, _wfreopen_s

Ponownie przypisuje wskaźnika pliku.Te wersje freopen, _wfreopen mają rozszerzenia zabezpieczeń, zgodnie z opisem w Funkcje zabezpieczeń w CRT.

errno_t freopen( 
   FILE** pFile,
   const char *path,
   const char *mode,
   FILE *stream 
);
errno_t _wfreopen( 
   FILE** pFile,
   const wchar_t *path,
   const wchar_t *mode,
   FILE *stream 
);

Parametry

  • [poza] pFile
    Wskaźnik do wskaźnika pliku dostarczane przez wywołanie.

  • [in] path
    Ścieżka do nowego pliku.

  • [in] mode
    Dozwolony typ dostępu.

  • [in] stream
    Wskaźnik na FILE strukturę.

Wartość zwracana

Każda z tych funkcji zwraca kod błędu.Jeśli wystąpi błąd, oryginalny plik musi być zamknięty.

Uwagi

freopen_s Funkcja zamyka plik aktualnie skojarzone z stream i ponownie przypisuje stream do pliku określonego przez path._wfreopen_s jest wersją szeroko charakter _freopen_s;  path i mode argumentów do _wfreopen_s są ciągi znaków wide._wfreopen_s i _freopen_s zachowują się identycznie w innych przypadkach.

Jeśli którykolwiek z pFile, path, mode, lub stream są NULL, lub, jeśli path 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ą EINVAL.

Rutynowe mapowania zwykłego tekstu

Procedura Tchar.h

_UNICODE & _MBCS nie zdefiniowano

_MBCS zdefiniowano

_UNICODE zdefiniowany

_tfreopen_s

freopen_s

freopen_s

_wfreopen_s

freopen_sjest 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_s 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_s

<stdio.h>

_wfreopen_s

<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_s.c
// 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 )
{
   errno_t err;
   // Reassign "stderr" to "freopen.out": 
   err = freopen_s( &stream, "freopen.out", "w", stderr );

   if( err != 0 )
      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" );
}
  

Odpowiednik w programie .NET Framework

Zobacz też

Informacje

We/Wy strumienia

freopen, _wfreopen

fclose, _fcloseall

_fdopen, _wfdopen

_fileno

fopen, _wfopen

_open, _wopen

_setmode