Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Menetapkan ulang penunjuk file. Versi fungsi yang lebih aman tersedia; lihat freopen_s, _wfreopen_s.
Sintaks
FILE *freopen(
const char *path,
const char *mode,
FILE *stream
);
FILE *_wfreopen(
const wchar_t *path,
const wchar_t *mode,
FILE *stream
);
Parameter
path
Jalur file baru.
mode
Jenis akses yang diizinkan.
stream
Penunjuk ke FILE struktur.
Nilai hasil
Masing-masing fungsi ini mengembalikan penunjuk ke file yang baru dibuka. Jika terjadi kesalahan, file asli ditutup, dan fungsi mengembalikan NULL nilai penunjuk. Jika path, mode, atau stream adalah penunjuk null, atau jika filename adalah string kosong, fungsi ini memanggil handler parameter yang tidak valid, seperti yang dijelaskan dalam Validasi parameter. Jika eksekusi diizinkan untuk melanjutkan, fungsi-fungsi ini diatur errno ke EINVAL dan mengembalikan NULL.
Untuk informasi selengkapnya tentang kode kesalahan, lihat errno, , _doserrno_sys_errlist, dan _sys_nerr.
Keterangan
Versi fungsi ini yang lebih aman ada, lihat freopen_s, _wfreopen_s.
Fungsi freopen menutup file yang saat ini terkait dengan stream dan menetapkan stream ulang ke file yang ditentukan oleh path. _wfreopen adalah versi karakter yang luas dari _freopen; path argumen dan mode untuk _wfreopen adalah string karakter lebar. _wfreopen dan _freopen berulah secara identik jika tidak.
Secara default, status global fungsi ini dicakup ke aplikasi. Untuk mengubah perilaku ini, lihat Status global di CRT.
Pemetaan rutin teks generik
TCHAR.H Rutin |
_UNICODE dan _MBCS tidak ditentukan |
_MBCS Didefinisikan |
_UNICODE Didefinisikan |
|---|---|---|---|
_tfreopen |
freopen |
freopen |
_wfreopen |
freopen biasanya digunakan untuk mengalihkan file stdinyang telah dibuka sebelumnya , , stdoutdan stderr ke file yang ditentukan oleh pengguna. File baru yang terkait dengan stream dibuka dengan mode, yang merupakan string karakter yang menentukan jenis akses yang diminta untuk file, sebagai berikut:
mode |
Access |
|---|---|
"r" |
Buka untuk membaca. Jika file tidak ada atau tidak dapat ditemukan, freopen panggilan gagal. |
"w" |
Membuka file kosong untuk ditulis. Jika file yang diberikan ada, isinya akan dihancurkan. |
"a" |
Terbuka untuk menulis di akhir file (menambahkan) tanpa menghapus penanda end-of-file (EOF) sebelum data baru ditulis ke file. Membuat file jika tidak ada. |
"r+" |
Terbuka untuk membaca dan menulis. File harus ada. |
"w+" |
Membuka file kosong untuk membaca dan menulis. Jika file ada, isinya akan dihancurkan. |
"a+" |
Terbuka untuk membaca dan menambahkan. Operasi penampingan mencakup penghapusan penanda EOF sebelum data baru ditulis ke file. Penanda EOF tidak dipulihkan setelah penulisan selesai. Membuat file jika tidak ada. |
"w" Gunakan jenis dan "w+" dengan hati-hati, karena dapat menghancurkan file yang ada. Mulai dari C11, Anda dapat menambahkan "x" ke "w" atau "w+" menyebabkan fungsi gagal jika file ada, alih-alih menimpanya.
Ketika file dibuka dengan "a" jenis akses atau "a+" , semua operasi tulis terjadi di akhir file. Meskipun penunjuk file dapat diposisikan ulang menggunakan fseek atau rewind, penunjuk file selalu dipindahkan kembali ke akhir file sebelum operasi tulis dilakukan. Dengan demikian, data yang ada tidak dapat ditimpa.
"a" Mode tidak menghapus penanda EOF sebelum menambahkan ke file. Setelah penambahan terjadi, perintah MS-DOS TYPE hanya menampilkan data hingga penanda EOF asli dan bukan data apa pun yang ditambahkan ke file. "a+" Mode ini menghapus penanda EOF sebelum menambahkan ke file. Setelah menambahkan, perintah MS-DOS TYPE menunjukkan semua data dalam file. "a+" Mode ini diperlukan untuk menambahkan ke file stream yang dihentikan dengan penanda CTRL+Z EOF.
"r+"Ketika jenis akses , , "w+"atau "a+" ditentukan, baik membaca dan menulis diizinkan (file dikatakan terbuka untuk "pembaruan"). Namun, ketika Anda beralih antara membaca dan menulis, harus ada operasi intervensi fsetpos, fseek, atau rewind . Posisi saat ini dapat ditentukan untuk fsetpos operasi atau fseek , jika Anda mau. Selain nilai di atas, salah satu karakter berikut dapat disertakan dalam mode string untuk menentukan mode terjemahan untuk baris baru.
mode Pengubah |
Mode terjemahan |
|---|---|
t |
Buka dalam mode teks (diterjemahkan). |
b |
Buka dalam mode biner (tidak diterjemahkan) ; terjemahan yang melibatkan karakter carriage-return dan line feed ditekan. |
Dalam mode teks (diterjemahkan), kombinasi umpan baris kembali (CR-LF) diterjemahkan ke dalam karakter umpan baris tunggal (LF) pada input; Karakter LF diterjemahkan ke kombinasi CR-LF pada output. Selain itu, CTRL+Z ditafsirkan sebagai karakter akhir file pada input. Dalam file yang dibuka untuk membaca atau menulis dan membaca dengan "a+", pustaka run-time memeriksa CTRL+Z di akhir file dan menghapusnya, jika memungkinkan. Ini dihapus karena menggunakan fseek dan ftell untuk berpindah dalam file dapat menyebabkan fseek berperilaku tidak benar di dekat akhir file. Jangan gunakan t opsi jika Anda menginginkan portabilitas ANSI karena ini adalah ekstensi Microsoft.
Jika t atau b tidak diberikan dalam mode, mode terjemahan default ditentukan oleh variabel _fmodeglobal . Jika t atau b diawali ke argumen, fungsi gagal dan mengembalikan NULL.
Untuk diskusi teks dan mode biner, lihat Teks dan I/O file mode biner.
Persyaratan
| Fungsi | Header yang diperlukan |
|---|---|
freopen |
<stdio.h> |
_wfreopen |
<stdio.h> atau <wchar.h> |
Konsol tidak didukung di aplikasi Platform Windows Universal (UWP). Handel aliran standar yang terkait dengan konsol, , stdin, stdoutdan stderr, harus dialihkan sebelum fungsi run-time C dapat menggunakannya di aplikasi UWP. Untuk informasi kompatibilitas selengkapnya, lihat Kompatibilitas.
Contoh
// 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" );
}
successfully reassigned
This will go to the file 'freopen.out'
Lihat juga
Streaming I/O
fclose, _fcloseall
_fdopen, _wfdopen
_fileno
fopen, _wfopen
_open, _wopen
_setmode