Реферати українською » Информатика, программирование » Запис і зчитування даних (роботу з файлами)


Реферат Запис і зчитування даних (роботу з файлами)

Страница 1 из 2 | Следующая страница

У роботі розглядатимуться два способу роботи з файлами і стандартний клас MFC CFileDialog.

1. Фундаментальна обізнаність із файлами в З ( працює й у З++ ).

2. Фундаментальна обізнаність із файлами з допомогою MFC( класи CFile, CStdioFile, ... ) і стандартний клас MFC CFileDialog.

1. Фундаментальна обізнаність із файлами в З ( працює й у З++ )..

#include <iostream.h>

#include <stdio.h>

void main( void )

{

FILE *file;

char* file_name = "file.txt";

char load_string[50] = "none";

file = fopen( file_name, "w" );

fputs( "string", file );

fclose( file );

file = fopen( file_name, "r" );

if( file != 0 )

{

fgets( load_string, 50 , file );

cout << "load_string = " << load_string << endl;

}

else

{

cout << "File not found !!!" << endl;

}

fclose(file);

}

Опис функцій роботи з файломи перебувають у бібліотеці stdio.h

Спочатку треба створити покажчик на зміну типу FILE ( FILE* file; ).

Відкриття файла виробляється викликом функції fopen ( file = fopen( file_name, "w" ); )

Перший параметр цієї функції - ім'я файла, другий - вказує що не режимі повинен бути відкритий файл. "w" - відкрити для записи, "r" - відкрити для читання, "a" - доповнення файла( це найбільш використовувані режими, хоча й інші ). Запис і зчитування даних із файла здійснюється такими функціями : fputc, fputs, fgetc, fgets, fprintf, fscanf( опис цих функцій дивіться в stdio.h).

Закриття файла здійснюється викликом функції fclose ( fclose( file ); ).

Фундаментальна обізнаність із файлами з допомогою MFC( класи CFile, CStdioFile, ... ) і стандартний клас MFC CFileDialog.

Клас CFile

Клас CMemFile

Клас CStdioFile

Приклади запису і читання з файла

У "бібліотеку MFC включено кілька класів задля забезпечення роботи з файлами. Рассматриваемые нижче класи успадковуються від базового класу CFile.

Клас CF ile

Клас CFile призначений задля забезпечення роботи з файлами. Він дає змогу спростити використання файлів, представляючи файл як об'єкт, що можна створити, читати, записувати тощо.

Щоб самому отримати доступом до файлу, спочатку треба створити об'єкт класу CFile. Конструктор класу дозволяє відразу після створення такої об'єкта відкрити файл. Але й відкрити файл і пізніше, скориставшись методом Open.

Відкриття й створення файлів

Після створення об'єкта класу CFile можна відкрити файл, викликавши метод Open. Методу слід зазначити шлях до открываемому файлу і режим її використання. Прототип методу Open має такий вигляд:

virtual BOOL Open(LPCTSTR lpszFileName,

UINT nOpenFlags, CFileException* pError=NULL);

Як параметра lpszFileName слід зазначити ім'я открываемого файла. Можна вказати лише ім'я файла чи повне ім'я файла, у тому числі повний шлях щодо нього.

Другий параметр nOpenFlags визначає дію, яке виконує методом Open з файлом, і навіть атрибути файла. Нижче подані деякі возможеые значення параметра nOpenFlags:

CFile::modeCreate - Складається новий файл. Якщо зазначений файл існує, його вміст стирається й довжину файла встановлюється рівної нулю.

CFile::modeNoTruncate - Цей файл призначений від використання що з файлом CFile::modeCreate. Якщо складається вже наявний файл, його вміст нічого очікувати віддалене.

CFile::modeRead - Файл відчиняються лише для читання.

CFile::modeReadWrite - Файл відкривається для запису і для читання.

CFile::modeWrite - Файл відчиняються лише для записи.

CFile::typeText - Використовується класами, породженими від класу CFile, наприклад CStdioFile, до роботи з файлами в текстовому режимі. Текстовий режим забезпечує перетворення комбінації символу повернення каретки і символу перекладу рядки.

CFile::Binary - Використовується класами, породженими від класу CFile, наприклад CStdioFile, до роботи з файлами в двоичном режимі.

Необязательный параметр pError, що є покажчиком на об'єкт класу CFileException, використовується в тому разі, якщо виконання операції з файлом викликає помилку. Причому у об'єкт, указываемый pError, буде записана додаткову інформацію.

Метод Open повертає не нульовий значення, якщо файл відкрито й нуль у разі помилки. Помилка під час відкриття файла може статися, наприклад, якщо методу Open зазначений для читання неіснуючий файл.

Идентификатор відкритого файла

До складу класу CFile входить елемент даних m_hFile типу UINT. У ньому зберігається ідентифікатор відкритого файла. Якщо об'єкт класу CFile створено, але файл ще відкритий, то перемінної m_hFile записана константа hFileNull.

Зазвичай ідентифікатор відкритого файла безпосередньо немає. Методи класу CFile дозволяють виконувати практично будь-які операції з файлами і вимагають вказувати ідентифікатор файла. Оскільки m_hFile є важливим елементом класу, то реалізація його методів має вільний доступу до нього.

Закриття файлів

Після закінчення роботи з файлом, їх треба закрити. Клас CFile має при цьому спеціальний метод Close. Слід зазначити, що й створили об'єкт класу CFile і відкритий файл, та був об'єкт видаляється, то пов'язані з ним файл закривається автоматично з допомогою деструктора.

Читання і запис файлів

Для доступу до файлам призначено кілька методів класу CFile: Read, ReadHuge, Write, WriteHuge, Flush. Методи Read і ReadHuge призначені для читання даних із попередньо відкритого файла. У 32-разрядных операційні системи обидва методу можуть одночасно вважати з файла більше 65535 байт. Спецификация ReadHuge вважається застарілою, і залишено лише сумісності з 16-разрядными операційними системами.

Дані, прочитані з файла, записуються в буфер lpBuf. Параметр nCount визначає кількість байт, які потрібно вважати з файла. Фактично з файла то, можливо лічено менше байт, ніж попросили параметром nCount. Це відбувається, якщо при зачитуванні досягнуть кінець файла. Методи повертають кількість байт, прочитаних з файла.

Для запис у файл призначені методи Write і WriteHuge. У 32-разрядных операційні системи обидва методу можуть одночасно нотувати у файл більше 65535 байт. Методи записує у відкритий файл nCount байт з буфера lpBuf. У разі помилки записи, наприклад переповнення диска, методи викликає обробку винятку.

Метод Flush

Коли використовується метод Write чи WriteHuge для записи даних на диск, вони кілька днів можуть бути в часі буфері. Аби, що ці зміни внесені до файл на диску, потрібно скористатися методом Flush.

Операції з файлами

До складу класу входять методи, дозволяють виконувати над файлами різні операції, наприклад копіювання, перейменування, видалення, зміна атрибутів.

Для зміни імені файла клас CFile включає статичний метод Rename, виконує функції цієї команди. Метод не можна використовуватиме перейменування каталогів. У разі помилки метод викликає виняток.

Для видалення файлів у п'ятому класі CFile включений статичний метод Remove, дозволяє видалити зазначений файл. Цей метод Демшевського не дозволяє видаляти каталоги. Якщо видалити файл неможливо, то метод викликає виняток.

Щоб співаку визначити дату та палестинці час створення файла, його довжину, і атрибути, призначений статичний метод GetStatus. Існує чи два різновиди методу - перший визначений віртуальний, а другий - як статичний метод.

Віртуальне версія методу GetStatus визначає стан відкритого файла, що з даним об'єктом класу CFile. Цей метод викликається тільки тоді ми, щоб класу CFile створено, і файл відкритий.

Статична версія методу GetStatus дозволяє визначити характеристики файла, не що з об'єктом класу CFile. Щоб скористатися цим методом, необов'язково попередньо відкривати файл.

Блокування

До складу класу включені методи LockRange і UnlockRange, дозволяють заблокувати чи кілька фрагментів даних файла для доступу з деяких інших процесів. Якщо додаток намагається повторно блокувати дані, вже заблоковані раніше цим або іншими додатком, викликається виняток. Блокування є одне із механізмів, дозволяють кільком додатків чи процесам одночасно працювати з однією файлом, не заважаючи одна одній.

Встановити блокування можна з допомогою методу LockRange. Щоб зняти встановлені блокування, треба скористатися методом UnlockRange. Якщо одному файлі встановлено трохи блокування, кожен із них повинна зніматися окремим викликом методу UnlockRange.

Позиціонування

Щоб перемістити покажчик поточної позиції файла до нового становище, можна скористатися однією з наступних методів класу CFile - Seek, SeekToBegin, SeekToEnd. До складу класу CFile також входять методи, дозволяють встановити та змінити довжину файла, - GetLength, SetLength.

Відкриття файла покажчик поточної позиції файла у найбільш початку файла. Коли порція даних прочитане чи записана, то покажчик поточної позиції переміщається убік кінця файла і свідчить про дані, які читатися чи записуватися черговий операцією читання чи запис у файл.

Щоб перемістити покажчик поточної позиції файла у будь-яку довільну місце, можна скористатися універсальним методом Seek. Він дає змогу перемістити покажчик на певна кількість байт щодо початку, кінця або поточної позиції покажчика.

Щоб перемістити покажчик на початок чи кінець файла, найзручніше використовувати спеціальні методи. Метод SeekToBegin переміщає покажчик на початок файла, а метод SeekToEnd - у його кінець.

Для визначення довжини відкритого файла зовсім необов'язково переміщати його покажчик. Можна скористатися методом GetLength. Цей метод також повертає довжину відкритого файла в байтах. Метод SetLength дозволяє змінити довжину відкритого файла. Якщо за допомоги цього розмір файла збільшується, ті значення останніх байт не визначено.

Поточну позицію покажчика файла можна визначити з допомогою методу GetPosition. Возвращаемое методом GetPosition 32-разрядное значення визначає усунення покажчика з початку файла.

Характеристики відкритого файла

Щоб співаку визначити розташування відкритого файла на диску, треба викликати метод GetFilePath. Цей метод повертає об'єкт класу CString, де міститься повний шлях файла, включаючи ім'я диска, каталоги, ім'я файла та її розширення.

Якщо потрібно визначити лише ім'я і розширення відкритого файла, можна скористатися методом GetFileName. Він повертає об'єкт класу CString, де знаходиться ім'я файла. Що стосується, коли це треба дізнатися лише ім'я відкритого файла без розширення, користуються методом GetFileTitle.

Наступний метод класу CFile дозволяє визначити шлях файла. Це метод не створює, не копіює і змінює імені файла, вона повинна лише заповнює відповідний елемент даних в об'єкті класу CFile.

Клас CMemFile

У "бібліотеку MFC входить клас CMemFile, наслідуваний від базового класу CFile. Клас CMemFile представляє файл, розміщений, оперативному пам'яті. З об'єктами класу CMemFile як і, як і з об'єктами класу CFile. Відмінність у тому, що файл, пов'язані з об'єктом CMemFile, розташований не так на диску, а оперативної пам'яті комп'ютера. У результаті операції з такою файлом відбуваються значно швидше, ніж із звичайними файлами.

Працюючи з об'єктами класу CMemFile, можна використовувати майже всі методи класу CFile, описані вище. Можна записувати дані у такому файл чи зчитувати їх. Крім цих методів у склад класу CMemFile включені додаткові методи.

До сформування об'єктів класу CMemFile призначено два різних конструктора. Перший конструктор CMemFile має лише один необов'язковий параметр nGrowBytes:

CMemFile(UINT nGrowBytes=1024);

Цей конструктор створює оперативному пам'яті порожній файл. Після створення файл автоматично відкривається (непотрібно викликати метод Open).

Коли починається запис у такому файл, автоматично виділяється блок пам'яті. Для отримання пам'яті методи класу CMemFile викликають стандартні функції malloc, realloc і free. Якщо виділеного блоку пам'яті недостатньо, її розмір збільшується. Збільшення блоку пам'яті файла іде за рахунок частинам по nGrowBytes байт. Після відходу об'єкта класу CMemFile використовувана пам'ять автоматично повертається системі.

Другий конструктор класу CMemFile має як складний прототип. Це конструктор використовують у тому випадку, коли програміст сам виділяє пам'ять для файла:

CMemFile(BYTE* lpBuffer, UINT nBufferSize,

UINT nGrowBytes=0);

Параметр lpBuffer свідчить про буфер, який використовуватися для файла. Розмір буфера визначається параметром nBufferSize.

Необязательный параметр nGrowBytes використовується понад комплексно, порівняно з першим конструкторі класу. Якщо nGrowBytes містить нуль, то створений файл міститиме дані з буфера lpBuffer. Довжина такого файла дорівнюватиме nBufferSize.

Якщо nGrowBytes більше нуля, то вміст буфера lpBuffer ігнорується. З іншого боку, тоді як такий файл записується більше даних, ніж міститься у відведеному буфері, його розмір автоматично збільшується. Збільшення блоку пам'яті файла іде за рахунок частинам по nGrowBytes байт.

Клас CMemFile дозволяє їм отримати покажчик галузь пам'яті, що використовується файлом. Через цей покажчик можна безпосередньо працювати зі змістом файла, не обмежуючи себе методами класу CFile. Для отримання покажчика на буфер файла можна скористатися методом Detach. Перед цим корисно визначити довжину файла (і розмір буфера пам'яті), викликавши метод GetLength.

Метод Detach закриває даний файл і повертає покажчик на використовуваний їм блок пам'яті. Якщо знову доведеться шукати відкрити файл і намагається пов'язати з нею оперативний блок пам'яті, потрібно викликати метод Attach.

Слід зазначити, що з управління буфером файла клас CMemFile викликає стандартні функції malloc, realloc і free. Тому, ніж порушувати механізм управління пам'яттю, буфер lpBuffer має бути створений функціями malloc чи calloc.

Клас CStdioFile

Тим, котрі звикли користуватися функціями потокового ввода/вывода з стандартної бібліотеки З і З++, слід звернути увагу до клас CStdioFile, успадкований від базового класу CFile. Цей клас дозволяє виконувати буферизированный ввод/вывод в текстовому і двоичном режимі. Для об'єктів класу CStdioFile можна викликати майже всі методи класу CFile.

До класу CStdioFile входить елемент даних m_pStream, який містить покажчик відкрите файл. Якщо об'єкт класу CStdioFile створено, але файл ще відкритий, або закритий, то m_pStream містить константу NULL.

Клас CStdioFile має три різних конструктора. Перший конструктор класу CStdioFile немає параметрів. Цей конструктор лише створює об'єкт класу, але з відкриває ніяких файлів. Щоб відкрити файл, треба викликати метод Open базового класу CFile.

Другий конструктор класу CStdioFile можна викликати, якщо файл вже відкрито і треба створити новий об'єкт класу CStdioFile і намагається пов'язати з нею відкритий файл. Цей конструктор можна використовувати, якщо файл відкрили стандартної функцією fopen. Параметр методу мусить мати покажчик на файл, отриманий викликом стандартної функції

Страница 1 из 2 | Следующая страница

Схожі реферати:

Навігація