Giriş
Şu satırı dahil ederiz.
Constructor - default
Şöyle yaparız.
Constructor - string
Dosyayı sıfırlayarak(truncate) açmak için şöyle yaparız. Açma bayrağı ios::out olur.
Metin dosyaya eklemek yapmak için şöyle yaparız.
Bu constructor standart değil. C ile beraber çalışabilmeyi sağlar. Ayrıca işletim sistemine mahsus özelliklerin kullanılmasını sağlar. Windows'ta metod imzası şöyle
Dosyaya erişimin engellenmesi
Windows'ta dosyaya erişim şöyle engellenir.
Dosyanın silinmesi
Windows'ta dosyanın kapanınca silinmesi şöyle sağlanır. Normalde fopen()' 'r' , 'w', 'a' karakterleri verilebilir. Ancak VS2015 ile fopen'a c ve D bayrakları da geçilebiliyor.
1. CreateFile ile HANDLE yarat. Bu handle _open_osfhandle ile int'e çevrilir. int ise _fdopen ile FILE* yapısına çevrilir.
ofstream destructor'ı dosyayı kendi kapatır ve exception atılırsa yakalayıp ignore eder. Kendimizin dosyayı kapatması exception'ı yakalamamamız anlamına gelir. Aşağıdaki kodda close() çağırılması yanlıştır.
açma için ofstream.open () metodu kullanılır. open metoduna geçilen açma parametreleri olarak std::ostream::out veya std::ofstream::out ya da aşağıdaki örneklerdeki gibi yapılabilir. Hepsi aynıdır.
Mevcut dosyayı sıfırlamak(truncate) için örnek
Not : ifstream de seekg metodu var. ofstream de seekp metodu var.
Yazma konumunu değiştirmek için şöyle yaparız.
Yazma konumunu öğrenmek için şöyle yaparız.
Şöyle yaparız.
Şu satırı dahil ederiz.
#include <fstream>
Bu sınıfın kardeşi wofstream Sınıfı.Constructor - default
Şöyle yaparız.
std::ofstream ofs
;
open metodu ile dosyayı daha sonra açmak gerekir.Constructor - string
Dosyayı sıfırlayarak(truncate) açmak için şöyle yaparız. Açma bayrağı ios::out olur.
std::ofstream ofs ("my.txt");
Constructor - string + flag
Dosyayı sıfırlayarak(truncate) binary açmak için şöyle yaparız.
std::ofstream ofs ("my.bin", std::ios::binary);
std::ofstream ofs("my.txt" | ios::app)
Constructor - FILE*Bu constructor standart değil. C ile beraber çalışabilmeyi sağlar. Ayrıca işletim sistemine mahsus özelliklerin kullanılmasını sağlar. Windows'ta metod imzası şöyle
explicit basic_ofstream(_Filet *_File)
: _Mybase(&_Filebuffer),
_Filebuffer(_File)
{ // construct with specified C stream
}
Dosyaya erişimin engellenmesi
Windows'ta dosyaya erişim şöyle engellenir.
FILE* pLockFile = _fsopen(tmpfilename.c_str(), "w", _SH_DENYWR );
if (pLockFile!=NULL
{
// Write lock aquired
ofstream ofs (pLockFile);
}
Dosyanın silinmesi
Windows'ta dosyanın kapanınca silinmesi şöyle sağlanır. Normalde fopen()' 'r' , 'w', 'a' karakterleri verilebilir. Ancak VS2015 ile fopen'a c ve D bayrakları da geçilebiliyor.
FILE* pCommitFile = fopen(tmpfilename.c_str(), "wcD");
if (pCommitFile!=NULL)
{
// Commits when doing flush
ofstream ofs (pCommitFile);
}
Eğer fopen yetersizse iki yöntem daha var.1. CreateFile ile HANDLE yarat. Bu handle _open_osfhandle ile int'e çevrilir. int ise _fdopen ile FILE* yapısına çevrilir.
HANDLE file_handle = CreateFile(...);
int file_descriptor = _open_osfhandle((intptr_t)file_handle, 0);
FILE* file = _fdopen(file_descriptor, "w");
std::ofstream ofs (file);
2. _fsopen kullanılarak FILE* yaratılır.FILE* pLockFile = _fsopen(...);
ofstream ofs (pLockFile);
close metoduofstream destructor'ı dosyayı kendi kapatır ve exception atılırsa yakalayıp ignore eder. Kendimizin dosyayı kapatması exception'ı yakalamamamız anlamına gelir. Aşağıdaki kodda close() çağırılması yanlıştır.
bool SomeClass::saveData()
{
std::ofstream ofs (m_filename);
if (!ofs.is_open ())
return false;
ofs << m_member1 << std::endl;
ofs << m_member2 << std::endl;
ofs.close (); // passed review only with this line
return true;
}
Open işleminin başarılı olup olmadığını döner.const string file_path = "...";
ofstream ofs (file_path.c_str(), ios::binary | ios::out);
if (!ofs.is_open ())
{
cout << "Failure!" << endl;
return false;
}
open metoduaçma için ofstream.open () metodu kullanılır. open metoduna geçilen açma parametreleri olarak std::ostream::out veya std::ofstream::out ya da aşağıdaki örneklerdeki gibi yapılabilir. Hepsi aynıdır.
Mevcut dosyayı sıfırlamak(truncate) için örnek
ofstream ofs;
ofs.open("my.txt",ios::out);
Mevcut dosyaya ekleme yapmak için örnekofstream ofs;
ofs.open("my.txt",ios::out|ios::app);
seekp metoduNot : ifstream de seekg metodu var. ofstream de seekp metodu var.
Yazma konumunu değiştirmek için şöyle yaparız.
ofstream ofs;
int num = 2;
ofs.open("dat1", ios::app | ios::out | ios::in | ios::binary);
ofs.write((char *)num, sizeof(int));
f1.seekp (0);
tellp metoduYazma konumunu öğrenmek için şöyle yaparız.
long pos = ofs.tellp();
write metoduŞöyle yaparız.
if (ofs.write (taskToWrite->buffer,taskToWrite->length)) {
// Success
}
Hiç yorum yok:
Yorum Gönder