Вход изход и сериализация. Работа с файлови обекти без сериализация
| Информационни технологии | 2009-12-04 | 60 сваляния |
24 Вход/изход и сериализация. Работа с файлови обекти без сериализация. MFC класове за целта. Цел и предимства за въвеждане на архивни обекти. Предефиниране на операциите за сериализация.
Работа без сериализация базов клас CFile
CFile myfile;
CFileException e;
if ( file.Open( _T(My.txt), CFile::modeReadWrite, &e)){
// работим с файла
}
else{
e.ReportError();
}
същото може и така:
try{
CFile file ( _T(MyFile.txt), CFile::modeReadWrite);..
}
catch( CFileException& e){
eReportError(); eDelete();
}
-
затваряне:
-
file.Close();
-
CFile обект се затваря авт. при излизане извън обсег.
-
четене/ запис
BYTE buff[0x4000]; CFile file();
DWORD length = file.GetLenght();
while(length) {
UINT nByteRead = file.Read(buff, sizeof(buff));
lenght -= nByteRead;
}
- file.Write(buff, nByteRead); // записва определен брой байтове от буфера
- file.Seek( относит. отместване в байтове, спрямо какво)
- препоръчително е четенето да се обхване oт try catch
-
изтриване (Remove())
-
преименоване на файлове (Rename())
Производни на CFile класове
CMemFile, CSharedFile
COleDataObject::GetFileData
CSocketFile, стои между архивния обект и CSocket обекта.
CStdioFile , наследник на CFile. Пример:
пример:
try {
CStdioFile file( _T(My.txt), CFile::modeRead); ..
}
catch( CfFileException* e) { }
CInternetFile, CGopherFile и CHttpFile .
Изброяване на файлове и директории
::FindFirstFile
:: FindNextFile()
:: FindClose()
Универсален подход на I/O използване на архиви (базов клас CArchive)
Ето пример: искате в отоворен файл да запишете 2 променливи a,b:
file.Write( &a, sizeof(a));
file.Write( &b, sizeof (&b));
Ето другият подход:
CArchive ar( &file, CArchive::store);
ar << a << b;
Архива е един междинен обектмежду нас и запомнящата среда, скриващ спецификацията на запомнянето, а представящ на нас само стандартният диск. Едни и същи операции за вход/изход да бъдат използвани за данни с различен тип. Архива е винаги между нашето прилижение и запомнящата среда. Функцията на междинният слой е като един транслатор. Най-често архива се асоцира с диск. Първо създаваме архива обект, асоцираме го със запомнящата среда. Командите за вход/изход трябва да се предефинират за нашите данни и обекти. Всички примитивни типове имат предефинирани в MFC операции за << >> (BYTE, WORD, LONG, DWORD, float, double, intchar, char, unsigned int). Оперторите са предефинирани и за непримитивни типове, за които има стандартни MFC класове:
пример: Cstring string; ar<<string;
също и за: Ctime, Crect, Csize, ColeDateTime, cole variant , както и за структури SIZE, POINT, RECT.
Ако се създават собствени класове и ако искаме те да поддържат всички обекти от тези класове и ако направим класа наследник на Cobject тогава не е нужно да предефинираме командите за вход/изход.
Тагове от реферата: сериаия, операиит, въвежне, предимст, предефиниране, CFile











