Lek - 14 C++. Файлы. Классификация файлов.. Файлы. Классификация файлов Классификация файлов по доступу
Скачать 0.77 Mb.
|
Файлы. Классификация файловКлассификация файлов по доступуФайлы Последовательного доступа Прямого доступа При последовательном доступе файл рассматривается как последовательность значений, которые передаются в порядке их поступления (от программы или из окружения). Если файл открыт, то передача начинается с начала файла. При прямом доступе файл рассматривается как набор элементов, занимающих последовательные позиции в линейном порядке; значение может быть передано в элемент файла (или из него), находящийся в любой выбранной позиции. Позиция элемента задается его индексом Классификация файлов в С++Файлы Текстовые Двоичные Текстовый файл — файл, в котором каждый символ из используемого набора символов хранится в виде одного байта (кода, соответствующего символу). Текстовые файлы разбиваются на несколько строк с помощью специального символа «конец строки». Текстовый файл заканчивается специальным символом «конец строки». При записи в двоичный файл символы и числа записываются в виде последовательности байт (в своем внутреннем двоичном представлении в памяти компьютера). Основные концепции при работе с файлами в С++
Функции работы с файламиФайл открывается функцией:имя файловой переменной.open(имя файла)Файл закрывается функцией:имя файловой переменной.close()Проверка ошибок при выполнении файловых операций:имя файловой переменной.fail()Если в процессе файловой операции ошибок не было, функция возвратит ложь (0). Однако, если встретилась ошибка, функция fail возвратит истинуОпределение конца файла:имя файловой переменной.eof()функция возвращает значение 0, если конец файла еще не встретился, и 1, если встретился конец файла.Используя цикл while, ваши программы могут непрерывно читать содержимое файла, пока не найдут конец файла, как показано ниже:while (! input_file.eof()){ // Операторы }Открытие файлаКроме уже описанных процедур файл можно открывать другим способом, а имен сразу после объявления файловой переменной. Однако в этом случае необходимо указывать режимы открытия и тип переменной будет: fstream.fstream имя переменной («имя файла», режим);Следующая операция открытия файла открывает файл для вывода, используя режим ios::noreplace, чтобы предотвратить перезапись существующего файла:ifstream output_file("FIlename.EXT", ios::out | ios::noreplace);
Решение примера №1 Получение массива из файла Чтение массива из файла Вывод прочтенного массива Формирование нового массива Расчет значений нового массива Вывод нового массива Запись массива в файл
b[i] min=b[i] - + i=0; J=n/2; min=32000; Пример. Найти все простые делители числа M. Ввод и вывод осуществляются в текстовые файлы. Во входном файле m.txt вначале указано количество тестов. После чего идет: строка1. число М Рядок 2 .. N. Число М. Пример ввода 2 124 3090 Поиск простых делителей Чтение из файла Чтение количества тестов чтение числа Поиск простых делителей Поиск делителя Проверка делителя на простоту Запись результатов в файл
bool prost (int k) { bool pr=true; for (int i=2;i<=k-1;i++) if (k%i==0) pr= false; return pr; } int _tmain(int argc, _TCHAR* argv[]) { int n,m,k; ifstream f; f.open("c:\\m.txt"); ofstream f1; f1.open("c:\\m1.txt"); if (f.fail()) { cout<<"Error!!! Fail not open"; _getch(); exit(1); } return 0; } else { f>>n; for (int i=1;i<=n;i++) { f>>m; for (int j=2;j<=m-1;j++) { if (m%j==0) { k=j; if (prost(k)==true) f1< } } f1< } f.close(); f1.close(); } ДЗВ файле записан массив целых чисел a1,..,an необходимо:
Двоичные (бинарные) файлы1. Открытие файла для чтенияifstream имя файловой переменной(“путь”,ios::binary|ios::in)2. Открытие файла для записиofstream имя файловой переменной(“путь”,ios::binary|ios::out)3. Закрытие файлаимя файловой переменной.close();4. Ввод/вывод. Stream-библиотека C++ имеет перегруженные потоковые функции-элементы write и read для последовательного двоичного файлового ввода/вывода.Функция-элемент writeФункция write посылает ряд байт в выходной поток. Эта функция может записывать любую переменную или экземпляр в поток.Прототип перегруженной функции-элемента:ostream& write(const char* buff, int num);ostream& write(const signed char* buff, int num);ostream& write(const unsigned char* buff, int num);Параметр buff - это указатель на буфер, содержащий данные, которые будут посылаться в выходной поток.Параметр num указывает число байт в буфере, которые передаются в этот поток.Функция-элемент readФункция read считывает некоторое количество байт из входного потока. Эта функция может считывать любую переменную или экземпляр из потока.Прототип перегруженной функции-элемента read:ostream& read(char* buff, int num);ostream& read(signed char* buff, int num);ostream& read(unsigned char* buff, int num);Параметр buff - это указатель на буфер, который принимает данные из входного потока.Параметр num указывает число считываемых из потока байт.Оператор sizeofДля определения числа байт используется оператор sizeof.Результат оператора sizeof имеет тип size_t, целочисленный тип. Благодаря этому оператору можно избежать жесткого прописывания размеров данных, которые часто зависят от типа компьютера.Оператор sizeof может иметь один из следующих операндов.
Если оператор sizeof применяется к ссылке, он создает такой же результат, как если бы sizeof был применен к самому объекту.Оператор sizeof часто используется для вычисления количества элементов в массиве с помощью выражения следующего вида.sizeof array / sizeof array[0]
#include "stdafx.h" #include #include #include #include #include #include using namespace std; int _tmain(int argc, _TCHAR* argv[]) { system("CLS"); //Очистка экрана int A=0; double B=0; cout<<"A =" ; cin>>A; //Открываем файл в двоичном режиме для записи ofstream out("C://1.txt",ios::binary|ios::out); //Записываем в файл число A out.write((char*)&A,sizeof A); out.close(); //Закрываем файл cout<<"A = "< //Открываем файл в двоичном режиме только для чтения ifstream in("C://1.txt",ios::binary|ios::in); //Читаем оттуда информацию и запоминаем её в A in.read((char*)&A,sizeof A); in.close(); //Закрываем файл if (A>0) B=pow(A,1.0/2); else B=A*A; cout<<"B = "< system("PAUSE"); return 0; } |