freopen
, _wfreopen
Dosya işaretçisini yeniden atayın. İşlevlerin daha güvenli sürümleri mevcuttur; bkz. freopen_s
, _wfreopen_s
.
Sözdizimi
FILE *freopen(
const char *path,
const char *mode,
FILE *stream
);
FILE *_wfreopen(
const wchar_t *path,
const wchar_t *mode,
FILE *stream
);
Parametreler
path
Yeni dosyanın yolu.
mode
İzin verilen erişim türü.
stream
Yapı işaretçisi FILE
.
Dönüş değeri
Bu işlevlerin her biri yeni açılan dosyaya bir işaretçi döndürür. Hata oluşursa, özgün dosya kapatılır ve işlev bir NULL
işaretçi değeri döndürür. , path
mode
veya stream
boş bir işaretçiyse veya boş bir dizeysefilename
, bu işlevler Parametre doğrulamasında açıklandığı gibi geçersiz parametre işleyicisini çağırır. Yürütmenin devam etmesi için izin verilirse, bu işlevler olarak EINVAL
ayarlanır errno
ve döndürürNULL
.
Hata kodları hakkında daha fazla bilgi için bkz. errno
, _doserrno
, _sys_errlist
ve _sys_nerr
.
Açıklamalar
Bu işlevlerin daha güvenli sürümleri var, bkz. freopen_s
, _wfreopen_s
.
İşlev, freopen
şu anda ilişkili stream
olan dosyayı kapatır ve tarafından path
belirtilen dosyaya yeniden atayırstream
. _wfreopen
, öğesinin _freopen
geniş karakterli bir sürümüdür; path
ve mode
bağımsız değişkenleri _wfreopen
geniş karakterli dizelerdir. _wfreopen
ve _freopen
aksi takdirde aynı şekilde davran.
Varsayılan olarak, bu işlevin genel durumunun kapsamı uygulama olarak belirlenmiştir. Bu davranışı değiştirmek için bkz. CRT'de Genel durum.
Genel metin yordamı eşlemeleri
TCHAR.H Rutin |
_UNICODE ve _MBCS tanımlanmadı |
_MBCS Tanımlanan |
_UNICODE Tanımlanan |
---|---|---|---|
_tfreopen |
freopen |
freopen |
_wfreopen |
freopen
genellikle önceden açılmış , stdout
ve stderr
dosyalarını stdin
kullanıcı tarafından belirtilen dosyalara yeniden yönlendirmek için kullanılır. ile stream
ilişkilendirilmiş yeni dosya ile mode
açılır; bu, dosya için istenen erişim türünü belirten bir karakter dizesidir, aşağıdaki gibi:
mode |
Erişim |
---|---|
"r" |
Okuma için açılır. Dosya yoksa veya bulunamıyorsa, freopen çağrı başarısız olur. |
"w" |
Yazmak için boş bir dosya açar. Verilen dosya varsa, içeriği yok edilir. |
"a" |
Dosyaya yeni veriler yazılmadan önce dosya sonu (EOF) işaretçisini kaldırmadan dosyanın sonuna (ekleme) yazma için açılır. Yoksa dosyayı oluşturur. |
"r+" |
Hem okuma hem de yazma için açılır. Dosya mevcut olmalıdır. |
"w+" |
Hem okuma hem de yazma için boş bir dosya açar. Dosya varsa, içeriği yok edilir. |
"a+" |
Okuma ve ekleme için açılır. Ekleme işlemi, dosyaya yeni veriler yazılmadan önce EOF işaretçisinin kaldırılmasını içerir. EOF işaretçisi, yazma işlemi tamamlandıktan sonra geri yüklenmez. Yoksa dosyayı oluşturur. |
"w"
Ve "w+"
türlerini, mevcut dosyaları yok edebildiği için dikkatli kullanın. C11'den başlayarak, üzerine yazmak yerine dosya varsa işlevin başarısız olmasına neden olmak için öğesine veya "w+"
ekleyebilirsiniz."x"
"w"
Veya "a+"
erişim türüyle "a"
bir dosya açıldığında, tüm yazma işlemleri dosyanın sonunda gerçekleşir. Dosya işaretçisi veya kullanılarak fseek
yeniden konumlandırılsa da rewind
, herhangi bir yazma işlemi gerçekleştirilmeden önce dosya işaretçisi her zaman dosyanın sonuna geri taşınır. Bu nedenle, mevcut verilerin üzerine yazılamaz.
Mod, "a"
dosyaya eklemeden önce EOF işaretçisini kaldırmaz. Ekleme işlemi gerçekleştikten sonra, MS-DOS TYPE komutu yalnızca özgün EOF işaretçisine kadar olan verileri gösterir ve dosyaya eklenen verileri göstermez. Mod, "a+"
dosyaya eklemeden önce EOF işaretçisini kaldırır. Ekledikten sonra, MS-DOS TYPE komutu dosyadaki tüm verileri gösterir. Mod "a+"
, CTRL+Z EOF işaretçisiyle sonlandırılan bir akış dosyasına eklemek için gereklidir.
, "w+"
veya "a+"
erişim türü belirtildiğinde"r+"
, hem okuma hem de yazma işlemlerine izin verilir (dosyanın "güncelleştirme" için açık olduğu söylenir). Ancak, okuma ve yazma arasında geçiş yaptığınızda, araya bir fsetpos
, fseek
veya rewind
işlemi gelmelidir. İsterseniz, veya fseek
işlemi için fsetpos
geçerli konum belirtilebilir. Yukarıdaki değerlere ek olarak, yeni satırlar için çeviri modunu belirtmek üzere dizeye aşağıdaki karakterlerden biri eklenebilir mode
.
mode Değiştirici |
Çeviri modu |
---|---|
t |
Metin (çevrilmiş) modunda açın. |
b |
İkili (çevrilmemiş) modda aç; satır başı ve satır besleme karakterleri içeren çeviriler gizleniyor. |
Metin (çevrilmiş) modunda satır başı besleme (CR-LF) birleşimleri girişteki tek satır besleme (LF) karakterlerine çevrilir; LF karakterleri çıkışta CR-LF birleşimlerine çevrilir. Ayrıca, CTRL+Z, girişte dosya sonu karakteri olarak yorumlanır. ile okumak veya yazmak ve okumak "a+"
için açılan dosyalarda, çalışma zamanı kitaplığı dosyanın sonunda CTRL+Z tuşlarını denetler ve mümkünse dosyayı kaldırır. Bir dosya içinde hareket etmek ve ftell
kullanmak fseek
dosyanın sonuna yakın bir şekilde düzgün davranmamasına neden fseek
olabileceğinden kaldırılır. ANSI taşınabilirliği istiyorsanız bu seçeneği kullanmayın t
çünkü bu bir Microsoft uzantısıdır.
t
veya b
içinde mode
verilmediyse, varsayılan çeviri modu genel değişkeni _fmode
tarafından tanımlanır. veya b
bağımsız değişkenine ön ekliyse t
işlev başarısız olur ve döndürürNULL
.
Metin ve ikili modlar hakkında bir tartışma için bkz . Metin ve ikili mod dosyası G/Ç.
Gereksinimler
Function | Gerekli başlık |
---|---|
freopen |
<stdio.h> |
_wfreopen |
<stdio.h> veya <wchar.h> |
Konsol Evrensel Windows Platformu (UWP) uygulamalarında desteklenmez. C çalışma zamanı işlevlerinin UWP uygulamalarında kullanabilmesi için önce konsolu stdin
, , stdout
ve stderr
ile ilişkilendirilmiş standart akış tanıtıcılarının yeniden yönlendirilmesi gerekir. Daha fazla uyumluluk bilgisi için bkz . Uyumluluk.
Örnek
// 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'
Ayrıca bkz.
Akış G/Ç
fclose
, _fcloseall
_fdopen
, _wfdopen
_fileno
fopen
, _wfopen
_open
, _wopen
_setmode
Geri Bildirim
https://aka.ms/ContentUserFeedback.
Çok yakında: 2024 boyunca, içerik için geri bildirim mekanizması olarak GitHub Sorunları’nı kullanımdan kaldıracak ve yeni bir geri bildirim sistemiyle değiştireceğiz. Daha fazla bilgi için bkz.Gönderin ve geri bildirimi görüntüleyin