Aracılığıyla paylaş


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. , pathmodeveya 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_errlistve _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 pathbelirtilen dosyaya yeniden atayırstream. _wfreopen , öğesinin _freopengeniş 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

freopengenellikle önceden açılmış , stdoutve stderr dosyalarını stdinkullanıcı tarafından belirtilen dosyalara yeniden yönlendirmek için kullanılır. ile stream ilişkilendirilmiş yeni dosya ile modeaçı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, fseekveya 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 modeverilmediyse, varsayılan çeviri modu genel değişkeni _fmodetarafı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, , stdoutve stderrile 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