Aracılığıyla paylaş


fopen_s, _wfopen_s

Bir dosyayı açar.Bu sürümleri fopen, _wfopen açıklandığı gibi güvenlik geliştirmeleri, sahip crt güvenlik özellikleri.

errno_t fopen_s( 
   FILE** pFile,
   const char *filename,
   const char *mode 
);
errno_t _wfopen_s(
   FILE** pFile,
   const wchar_t *filename,
   const wchar_t *mode 
);

Parametreler

  • [çıkış]pFile
    Açılan dosya işaretçisini aldığınız dosya işaretçisi için bir işaretçi.

  • [in]filename
    Dosya adı.

  • [in]mode
    İzin verilen erişim türü.

Dönüş Değeri

Sıfır başarılı olursa; hata durumunda bir hata kodu.Bkz: errno, _doserrno, _sys_errlist ve _sys_nerr bu hata kodları hakkında daha fazla bilgi için.

Hata koşulları

pFile

filename

mode

Dönüş Değeri

İçeriğipFile

NULL

herhangi bir

herhangi bir

EINVAL

değişmeden

herhangi bir

NULL

herhangi bir

EINVAL

değişmeden

herhangi bir

herhangi bir

NULL

EINVAL

değişmeden

Notlar

Tarafından açılmış dosyaları fopen_s ve _wfopen_s paylaşılabilir değil.Bir dosyanın paylaşılabilir olması gerekiyorsa kullanın _fsopen, _wfsopen uygun paylaşım modu sabiti ile — Örneğin, _SH_DENYNO okuma/yazma paylaşmak için.

fopen_s İşlevi tarafından belirtilen dosyayı açar filename._wfopen_sgeniş karakter sürümü fopen_s; bağımsız _wfopen_s geniş karakter dizeleridir._wfopen_sve fopen_s Aksi takdirde aynı şekilde davranır.

fopen_sgeçerli yürütme noktasında dosya sistemi yolları kabul eder; Tarafından unc yolları ve eşlenen ağ sürücülerini içerir yollarını kabul fopen_s kodu yürütmesini sistem paylaşımına erişimi olan veya yürütme zamanında eşleştirilen ağ sürücüsünde olduğu sürece.Yolları oluşturmak ne zaman fopen_s, sürücüler, yollar, kullanılabilirliği hakkında varsayımlar yapmayın veya yürütme ortamında Ağ paylaşır.Bir yolu dizin ayırıcı olarak eğik çizgi (/) veya ters eğik çizgi (\) kullanabilirsiniz.

Bu işlevler, kendi parametrelerini doğrulayın.pFile, filename, Veya mode bir null işaretçi açıklandığı gibi bu işlevleri geçersiz parametre bir özel durum oluşturmak Parametre doğrulama.

Her zaman, herhangi bir dosya üzerinde daha fazla işlem gerçekleştirmeden önce işlevin başarılı olup olmadığını görmek için dönüş değeri denetleyin.Bir hata oluşursa, hata kodu döndürülür ve genel değişken errno ayarlanır.Daha fazla bilgi için bkz. errno, _doserrno, _sys_errlist ve _sys_nerr.

Unicode desteği

fopen_sUnicode dosya akışları destekler.Yeni veya varolan bir Unicode dosya açmak için bir ccs için istenen kodlamayı belirtir bayrak fopen_s:

fopen_s(&fp, "newfile.txt", "rw, ccs=encoding");

Allowed values of encoding are UNICODE, UTF-8, and UTF-16LE.Herhangi bir değer için belirtilen varsa encoding, fopen_s ANSI kodlamasını kullanır.

Dosya zaten var ve okuma veya ekleme için açılmış, bayt sırası işareti (bom), varsa, dosya kodlamasını belirler.Ürün Reçetesi kodlama tarafından belirtilen kodlama üzerinde öncelik kazanır ccs bayrağı.ccs Kodlaması yalnızca kullanılır yoksa veya dosyanın yeni bir dosya olup olmadığını hiçbir ürün Reçetesi olduğunda.

[!NOT]

Ürün Reçetesi algılama yalnızca Unicode modunda açılmış dosyalar için geçerlidir; diğer bir deyişle, bunun geçirerek ccs bayrağı.

Modları için çeşitli aşağıdaki tabloda özetlenmiştir ccs için verilen bayrakları fopen_s ve bayt sırası işaretleri dosyasında.

Bayrak ve ürün Reçetesi kodlamaları kullanılan temel alınarak ccs

ccsBayrak

Hiçbir ürün Reçetesi (veya yeni bir dosya)

ÜRÜN REÇETESİ: UTF-8

ÜRÜN REÇETESİ: UTF-16

UNICODE

UTF-16LE

UTF-8

UTF-16LE

UTF-8

UTF-8

UTF-8

UTF-16LE

UTF-16LE

UTF-16LE

UTF-8

UTF-16LE

Unicode modunda yazmak için açılan dosyalar otomatik olarak yazılmış bir ürün Reçetesi vardır.

mode Olan "a, ccs=<encoding>", fopen_s önce hem okuma erişimine ve yazma erişimine dosyayı açmaya çalışır.Başarılıysa, işlev dosya kodlaması belirlemek için ürün Reçetesi okur; işlem başarısız olursa, dosya için varsayılan kodlama işlevini kullanır.Her iki durumda da fopen_s sonra dosyayı salt yazılır erişimi ile yeniden açar.(Bu geçerlidir a modu yalnızca not a+.)

Genel metin eşlemeleri yordamına girildi

TCHAR.H yordamına girildi

_UNICODE & _mbcs tanımlanmamış

Tanımlanan _mbcs

Tanımlanan _UNICODE

_tfopen_s

fopen_s

fopen_s

_wfopen_s

Karakter dizesi mode gibi dosya için istenen erişim türünü belirtir.

  • "r"
    Okuma için açılır.Dosya yok veya bulunamıyor, fopen_s çağrısı başarısız.

  • "w"
    Yazmak için boş bir dosya açar.Dosya varsa, içeriği yok edilir.

  • "a"
    (eof işaretçisi kaldırmadan yeni bir veri dosyasına yazmadan önce ekleme) dosyanın sonundaki yazma için açar.Yoksa, dosyayı oluşturur.

  • "r+"
    Hem okuma ve yazma için açar.(Dosyanın varolması gerekir.)

  • "w+"
    Hem okumak ve yazmak için boş bir dosya açar.Dosya varsa, içeriği yok edilir.

  • "a+"
    Ekleme ve okuma için açılır.Ekleme işlemi, yeni veri dosyasına yazılır ve eof işaretçisi yazma işlemi tamamlandıktan sonra geri önce eof işaretinin kaldırılması içerir.Yoksa, dosyayı oluşturur.

Ne zaman bir dosya açıldığında kullanarak "a" veya "a+" erişim türü, tüm yazma işlemlerini dosyasının sonunda ortaya.Dosya işaretçisini kullanarak yeniden yerleştirilmesini fseek veya rewind, ancak herhangi bir işlem gerçekleştirilir, böylece varolan verilerin üzerine yazmadan önce her zaman geri dosya sonuna taşınır.

"a" Mod kaldırmaz eof işaretçisi dosyaya eklenmesinden önce.Ekleme gerçekleştikten sonra ms-dos type komutu yalnızca özgün eof işaretçisi kadar veri ve dosyanın sonuna hiçbir veri gösterir."a+" Modunu dosyaya eklenmesinden önce eof işareti kaldırabilirsiniz.Eklenmesinden sonra türü ms-dos komut dosyasındaki tüm verileri gösterir."a+" Modu ctrl + z eof işaretleyici kullanarak sonlandırılmış bir akış dosya ekleme için gereklidir.

Zaman "r+","w+", veya "a+" , hem okuma hem de yazma izin verilen erişim türü belirtildi. (Dosya açık "güncelleştirmesi" denir.) Ancak, okuma yazma geçtiğinizde, giriş işlemi eof işaretçisi sorunlarla gerekir.eof yok ise, aradaki bir dosya konumlandırma bir işlev çağrısı kullanmanız gerekir.Dosya konumlandırma işlevleri fsetpos, fseek, ve rewind.İçin okuma yazma arasında geçiş yaptığınızda, aradaki bir arama ya da kullanma fflush veya bir dosya konumlandırma işlev.

Yukarıdaki değerlere ek olarak, aşağıdaki karakterler eklenebilir mode yeni satır karakterlerini çeviri modunu belirtmek için:

  • t
    Açık metin modu (çevrilmiş).Bu modda, ctrl + z giriş üzerinde bir dosya sonu karakteri olarak yorumlanır.Okuma/yazma için açılan dosyalar, "a+", fopen_s için ctrl + z dosyanın sonundaki denetler ve bunu, mümkünse kaldırır.Bu kullanarak çünkü yapılır fseek ve ftell bir ctrl + z ile biter neden olabilir bir dosya içinde taşımak için fseek hatalı davranmasına dosya sonu.

Ayrıca, metin modunda, satır başı return–linefeed birleşimleri giriş üzerinde tek satır beslemeleri halinde çevrilir ve çıktıyı şaryo return–linefeed birleşimleri için satır besleme karakterleri çevrilir.Ne zaman bir Unicode akış-ı/o işlevi metin modunda (varsayılan), kaynak çalışır veya hedef akış çok baytlı bir karakter dizisi olarak kabul edilir.Bu nedenle, çok baytlı karakterleri Unicode giriş akışı işlevler geniş karakterlerine dönüştürmek (olarak da bir çağrı, mbtowc işlevi).Aynı nedenden dolayı çok baytlı karakterler için Unicode çıkış akışı işlevler geniş karakterler dönüştürme (olarak da bir çağrı, wctomb işlevi).

  • b
    Açık (untranslated) ikili modda; başı ve satır besleme karakterleri kapsayan çevirileri görüntülenmez.

t Veya b verilmemiştir mode, genel değişkeni tarafından tanımlanan varsayılan çeviri modu _fmode.t Veya b bağımsız değişken, işlev başarısız olur ve döner öneki NULL.

Metin ve ikili modda Unicode ve çok baytlı akış-ı/o kullanma hakkında daha fazla bilgi için bkz: metin ve ikili mod dosya g/ç ve Metin ve ikili modları Unicode akış g/ç.

  • c
    İlişkili tamamlama bayrağını etkinleştirmek filename dosyası arabellek içeriği, doğrudan diske yazılır, fflush veya _flushall olarak adlandırılır.

  • n
    Sıfırlamak için ilişkili tamamlama bayrak filename için "no-zorlamıştır." Bu varsayılandır.Ayrıca programınızı commode.obj ile bağlanıyorsanız genel tamamlama bayrağı geçersiz kılar.Açıkça commode programınızda bağlantı sürece genel tamamlama bayrağı "no-tamamlama" varsayılandır.OBJ (see Bağlantı seçenekleri).

  • N
    Dosya, alt işlemler tarafından devralınmadı belirtir.

  • S
    Önbelleğe alma için en iyi duruma getirilmiş, ancak sıralı erişim için diskten kısıtlı değil olduğunu belirtir.

  • R
    Önbelleğe alma için en iyi duruma getirilmiş, ancak rasgele erişim için diskten kısıtlı değil olduğunu belirtir.

  • T
    Bir dosyayı geçici belirtir.Değil aktarılmadan Mümkünse, diske.

  • D
    Bir dosyayı geçici belirtir.Son dosya işaretçisini kapatıldığında silinir.

  • ccs=ENCODING
    (utf-8, utf-16LE ve UNICODE) için bu dosyayı kullanmak için kodlanmış karakter kümesini belirtin.Bırakın Bu ANSI kodlamasını istiyorsanız belirtilmemiş.

Geçerli karakterler için mode kullanılan dize fopen_s ve _fdopen karşılık oflag kullanılan bağımsız değişkenler kapıyı Aç ve _sopengibi.

Mod dizedeki karakter

Eşdeğer oflag değerini _open/_sopen

a

_O_WRONLY | _O_APPEND(usually _O_WRONLY | _O_CREAT |_O_APPEND)

a+

_O_RDWR | _O_APPEND(usually _O_RDWR | _O_APPEND | _O_CREAT )

r

_O_RDONLY

r+

_O_RDWR

w

_O_WRONLY(usually _O_WRONLY |_O_CREAT | _O_TRUNC)

w+

_O_RDWR(usually _O_RDWR | _O_CREAT | _O_TRUNC)

b

_O_BINARY

t

_O_TEXT

c

None

n

None

S

_O_SEQUENTIAL

R

_O_RANDOM

T

_O_SHORTLIVED

D

_O_TEMPORARY

ccs=UNICODE

_O_WTEXT

ccs=UTF-8

_O_UTF8

ccs=UTF-16LE

_O_UTF16

Kullanıyorsanız, rb ve/modu, kodunuzu ve çok sayıda dosyayı okumak beklemeniz gerekmez veya ağ performansı hakkında Önemseme, bellekle eşlenen dosyalar Win32 de bir seçenek olabilir.

Gereksinimler

İşlev

Gerekli başlık

fopen_s

<stdio.h>

_wfopen_s

<stdio.h> veya <wchar.h>

Ek uyumluluk bilgileri için bkz: Uyumluluk giriş.

Kitaplıkları

Tüm sürümleri c çalışma zamanı kitaplıkları.

c, n, Ve tmode seçenekleri için Microsoft uzantıları olan fopen_s ve _fdopen ve burada ANSI taşınabilirlik istendiğini kullanılmamalıdır.

Örnek

// crt_fopen_s.c
// This program opens two files. It uses
// fclose to close the first file and
// _fcloseall to close all remaining files.
 

#include <stdio.h>

FILE *stream, *stream2;

int main( void )
{
   errno_t err;

   // Open for read (will fail if file "crt_fopen_s.c" does not exist)
   err  = fopen_s( &stream, "crt_fopen_s.c", "r" );
   if( err == 0 )
   {
      printf( "The file 'crt_fopen_s.c' was opened\n" );
   }
   else
   {
      printf( "The file 'crt_fopen_s.c' was not opened\n" );
   }

   // Open for write 
   err = fopen_s( &stream2, "data2", "w+" );
   if( err == 0 )
   {
      printf( "The file 'data2' was opened\n" );
   }
   else
   {
      printf( "The file 'data2' was not opened\n" );
   }

   // Close stream if it is not NULL 
   if( stream )
   {
      err = fclose( stream );
      if ( err == 0 )
      {
         printf( "The file 'crt_fopen_s.c' was closed\n" );
      }
      else
      {
         printf( "The file 'crt_fopen_s.c' was not closed\n" );
      }
   }

   // All other files are closed:
   int numclosed = _fcloseall( );
   printf( "Number of files closed by _fcloseall: %u\n", numclosed );
}
  

.NET Framework Eşdeğeri

Ayrıca bkz.

Başvuru

G/ç

fclose, _fcloseall

_fdopen, _wfdopen

ferror

_fileno

freopen, _wfreopen

_open, _wopen

_setmode