Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
11 - Файлы.docx
Скачиваний:
2
Добавлен:
01.04.2025
Размер:
311.88 Кб
Скачать

Запись в файл значений переменных

В рассмотренных примерах запись в файл велась посимвольно, однако этот способ не покрывает всех нужд программиста. Например, что делать, если требуется записать в файл значение целочисленной или вещественной переменной? Для этого существуют специальные средства.

В языке C++ для этих целей следует использовать открытый поток аналогично тому, как используется cout. Для примера рассмотрим, как записать в файл сумму двух введённых с клавиатуры чисел.

ofstream myFile("summa.txt");

int a, b;

cout << "Enter two numbers:" << endl;

cin >> a; cin >> b;

int summa = a+b;

myFile << summa << endl;

myFile.close();

По аналогичной схеме можно записать в файл некоторую последовательность. Рассмотрим следующую задачу. Требуется ввести с клавиатуры число N и записать в файл N первых элементов последовательности Фибоначчи.

ofstream myFile("fibonacci.txt");

int n; cout << "N="; cin >> n;

int x0=0, x1=1;

for (int i=0; i<n; i++) {

myFile << x0 << ", ";

int xn=x0+x1;

x0=x1; x1=xn;

}

myFile.close();

Указание пути к файлу

Путь к файлу может быть двух видов:

  • относительный

  • абсолютный

При указании относительного пути точкой отсчета является папка, где хранится файл с программой (*.cpp); при использовании абсолютного пути точка отсчета – это «мой компьютер».

При использовании относительного пути можно писать символ «..», который позволяет обратиться к родительской папке, аналогично любому файловому менеджеру:

Чтение информации из файла

Для чтения информации из файла мы рассмотрим Си-шный вариант при помощи функции fgetc() и два С++-ых способа. Схема чтения информации из файла аналогична записи:

  1. объявить файловую переменную;

  2. открыть файл для чтения;

  3. считать информацию из файла;

  4. закрыть файл.

//Шаги 1-2. Объявление файлового указателя

//и открытия файла

FILE* myFile = fopen("hello.txt", "r");

//Шаг 3. Чтение символа из файла

char symbol1 = fgetc(myFile); putchar(symbol1);

char symbol2 = fgetc(myFile); putchar(symbol2);

char symbol3 = fgetc(myFile); putchar(symbol3);

char symbol4 = fgetc(myFile); putchar(symbol4);

char symbol5 = fgetc(myFile); putchar(symbol5);

char symbol6 = fgetc(myFile); putchar(symbol6);

//Шаг 4. Закрытие файла

fclose(myFile);

Чтение файла целиком

Одной из важных задач, связанных с файлами, является чтение файла от начала до конца. Эта задача может быть связана с выводом содержимого файла, загрузкой данных из файла в массив, поиском каких-либо данных в файле и т.д. Задачи могут быть разными, но все они требуют считывания данных из файла, пока этот файл не закончится.

Наиболее простой вариант этой задачи – вывод содержимого файла на экран. Мы рассмотрим следующий алгоритм:

  • если файл не закончился, то считываем из него один символ и перемещаем файловый указатель далее;

  • выводим символ на экран.

Напомним, что для считывания одного символа из файла на языке Си используется функция fgetc(). Следующий фрагмент кода, снабжённый комментариями, реализует этот алгоритм.

//Объявляем файловый указатель и открываем файл.

FILE* fp = fopen("tutorial.cpp", "r");

//Пока не конец файла

while (!feof(fp)) {

//Считываем символ

char ch = fgetc(fp);

//Выводи его на экран

putchar(ch);

}

//Закрываем файл

fclose(fp);

После запуска программы на экране появится текст, записанный в файле. Если в качестве файла указать файл с кодом программы, то на экране появится код программы:

Если имя файла указано неправильно, то возникнет ошибка времени исполнения, говорящая о том, что файл с указанным именем не может быть открыт:

Вот как выглядит эта же программа на C++:

ifstream fp("tutorial.cpp");

//Пока неконец файла inFile

while (!fp.eof()) {

//Считываем символ из файла и перемещаем

//файловый указатель на следующую позицию

char symbol = fp.get();

//Выводи считанный символ на экран

cout << symbol;

}

fp.close();

Функции feof() и eof() возвращают true, если конец файла достигнут, и false – иначе.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]