Giriş
Şu satırı dahil ederiz.
Metodun imzası şöyledir.
ifstream sınıfı wchar_t alan bir constructor sunmuyor. Ancak Visual Studioa'da böyle bir constructor var. Kod portable olsun kaygısı yoksa kullanılabilir.
constructor - std::string
Bu metod C++11 ile geldi. Şöyle yaparız.
Binary olarak açmak için şöyle yaparız.
Şöyle yaparız.
Metodun imzası şöyledir. constructor ile aynı imzaya sahip.
ifstream biz kodlamasak bile her zaman ios::in modunda açılır.
2. openmode parametresi - ate modu
ios::ate kullanırsak okuma işareti dosyanın sonuna getirilir. Böylece dosyanın büyüklüğünü öğrenebiliriz.
3. openmode parametresi - binary modu
Dosya ios::binary modda açılmazsa tellg() ile büyüklüğünü doğru öğrenemeyebiliriz. Örneğin bazı Windows "\n" karakterini "\r\n" ile değiştirebilir.
Belirtilen byte sayısı kadar okumaya çalışır.
Dosyanın tamamını okumamızı sağlar. ostringstream rdbuf nesnesini eof oluncaya kadar okur.
Metod ismindeki g ve p uzantıları get ve put anlamına gelir. Açıklaması şöyle.
Okuma işaretini belirtilen konuma getirir.
Şöyle yaparız.
Şöyle yaparız.
Şu satırı dahil ederiz.
#include <fstream>
constructor - char * Metodun imzası şöyledir.
explicit ifstream (const char* filename, ios_base::openmode mode = ios_base::in);
Bu metod C++11'den önce kullanılırdı. Eğer std::string geçmeye kalkışırsak şu hatayı alırdıkno matching function for call to
'std::basic_ifstream<char>::basic_ifstream(std::string&)'
Dolayısıyla şöyle yapmak gerekirdi.string input = ...;
ifstream file (input.c_str());
constructor - wchar_tifstream sınıfı wchar_t alan bir constructor sunmuyor. Ancak Visual Studioa'da böyle bir constructor var. Kod portable olsun kaygısı yoksa kullanılabilir.
constructor - std::string
Bu metod C++11 ile geldi. Şöyle yaparız.
string input = ...;
ifstream file (input);
constructor - char * + open_modeBinary olarak açmak için şöyle yaparız.
ifstream file("myData.raw", ios::binary);
Text olarak açmak için şöyle yaparız.ifstream myData("myData.txt");
exceptions metoduŞöyle yaparız.
std::string const path = ...;
std::ifstream file;
file.exceptions (std::ios::badbit | std::ios::eofbit | std::ios::failbit);
file.open (path, std::ios::binary);
gcount metodu
Bu metod en son unformatted okuma işleminin kaç byte okuduğunu döndürür.file.read(thefile, size))
file.gcount();
is_open metodu
Şöyle yaparız.ifstream file;
file.open("salt.txt"); //open the file
if(file.is_open()) //if file is open
{...}
open metoduMetodun imzası şöyledir. constructor ile aynı imzaya sahip.
std::ifstream::open( const char * filename, ios_base::openmode mode=ios_base::in)
Dosyayı açma işleminin başarılı olup olmadığı fail() ile kontrol edilebilir.file.open(filename);
if (file.fail())
{
std::cout << "File is not found!";
exit(1);
}
else
{...}
openmode parametresi
ifstream ios_base sınıfından kalıttığı için open mode şöyle kullanılabilir. Yani ios_base::in ile ifstream::in arasında bir fark yok.ifstream file;
file.open("largefile.dat", ifstream::binary | ifstream::in);
Tablo şöyleios::in : Open file for reading data.1. openmode parametresi - in modu
ios::out :Creates file if it does not exist. All existing data is erased from the file as new data is written into the file.
ios::app : Creates file if it does not exist. New data is written at the end of the file without disturbing the existing data.
ios::ate : Open file for output. Data can be written anywhere in the file, similar to append.
ios::trunc :Discard file content, which is the default action for ios::out.
ios::binary : Open file in binary (non-text) mode.
ifstream biz kodlamasak bile her zaman ios::in modunda açılır.
2. openmode parametresi - ate modu
ios::ate kullanırsak okuma işareti dosyanın sonuna getirilir. Böylece dosyanın büyüklüğünü öğrenebiliriz.
3. openmode parametresi - binary modu
Dosya ios::binary modda açılmazsa tellg() ile büyüklüğünü doğru öğrenemeyebiliriz. Örneğin bazı Windows "\n" karakterini "\r\n" ile değiştirebilir.
ifstream file ("file", ios::binary|ios::ate);
long N = file.tellg ();
read metoduBelirtilen byte sayısı kadar okumaya çalışır.
uint8_t byte;
in.read((char*) (&input_byte), 1);
rdbuf metoduDosyanın tamamını okumamızı sağlar. ostringstream rdbuf nesnesini eof oluncaya kadar okur.
const char *filename = ...
ifstream in(filename);
ostringstream contents;
contents << in.rdbuf();
in.close();
Dosyayı başka dosyaya kopyalamamızı sağlar.ifstream stream1("...");
ofstream stream2("...");
stream2 << stream1.rdbuf();
seekg metoduMetod ismindeki g ve p uzantıları get ve put anlamına gelir. Açıklaması şöyle.
SEEKG() is used to move the get pointer to a desired location with respect to a reference point.Not 1 : 32 bit işletim sistemlerinde 2GB'den büyük dosyalarda seekg kullanırken dikkatli olmak gerekir. Dosya binary açılmış olmalıdır. Text dosyalarda seekg yanlış sonuç verebilir. Yani şöyle yapılmamalı.
TELLG() is used to know where the get pointer is in a file.
SEEKP() is used to move the put pointer to a desired location with respect to a reference point.
TELLP() is used to know where the put pointer is in a file.
ifstream input("data.txt");
input.seekg(25);
Not 2 : ifstream'de seekg metodu var. ofstream de is seekp metodu var.Okuma işaretini belirtilen konuma getirir.
file.seekg(0, std::ios::beg);
Şöyle de kullanılabilir.file.seekg (0, file.beg);
Sondan bir önceki konuma şöyle gideriz.file.seekg(-1,ios_base::end); // go to one position before the EOF
Ya da şöyle yaparız.long int seek_length = -1l;
file.seekg (seek_length, std::ios_base::end);
tellg metoduŞöyle yaparız.
ifstream file{"/tmp/test.bin", ios::binary};
// Record file length
size_t beg = file.tellg();
file.seekg( 0, ios::end );
size_t fileEnd = file.tellg();
unset metoduŞöyle yaparız.
filestream.unsetf (std::ios::skipws);
Böylece tüm dosya okunur.std::string str;
std::copy(std::istream_iterator<char>(filestream),
std::istream_iterator<char>(), std::back_inserter(str));
Hiç yorum yok:
Yorum Gönder