Как записать класс в файл c
Примеры использования средств C++ для работы с файлами
В теме приводятся примеры использования файловой системы C++ для:
- чтения информации из файлов;
- записи информации в файлы.
Содержание
- 1. Функция, читающая строки из клавиатуры и записывающая их в файл
- 2. Функция, которая читает текстовый файл и выводит его содержимое на экран
- 3. Пример бесформатного ввода/вывода. Копирование одного файла в другой
- 4. Пример бесформатного ввода/вывода. Копирование одного файла в другой. Функция put()
- 5. Пример функции записывающей структурную переменную в файл
- 6. Пример чтения структурной переменной из файла
- 7. Пример чтения/записи массива структур в файл. Функции write() , read()
- 8. Пример записи/чтения массива чисел типа double
- 9. Пример чтения из файла строк. Функция getline()
- 10. Пример чтения строк из файла. Функции getline() + eof()
Поиск на других ресурсах:
1. Функция, читающая строки из клавиатуры и записывающая их в файл
Результат работи программы:
2. Функция, которая читает текстовый файл и выводит его содержимое на экран
Функция Example2() читает содержимое файла filename , имя которого есть входящим параметром функции.
3. Пример бесформатного ввода/вывода. Копирование одного файла в другой
В примере реализована функция Example3() , которая выполняет копирование файлов в двоичном (бинарном) формате. Функция получает два параметра. Первый параметр типа const char* есть имя файла-источника. Второй параметр типа const char* есть имя файла-назначения.
Функция реализует посимвольное копирование. Для получения символа из файла-источника используется функция get() .
Вызов функции Example3() из функции main() может быть следующим:
4. Пример бесформатного ввода/вывода. Копирование одного файла в другой. Функция put()
Функция Example4() из данного примера работает также как и предыдущая, только вместо вывода в поток << используется функция put() . Также, с помощью функции is_open() выполняется проверка на корректность открытия файла.
5. Пример функции записывающей структурную переменную в файл
По данному примеру можно реализовывать собственные функции, которые будут записывать структуры или классы в файл.
Реализована функция Example5() , которая выполняет запись структурной переменной типа BOOK в файл, имя которого есть входящим параметром. Функция Example5() использует функцию write() для записи. Файл открывается в двоичном формате ( ios::binary ).
6. Пример чтения структурной переменной из файла
Данный пример есть продолжением предыдущего примера из пункта 5. В примере в функции Example6() заполняется значение структурной переменной типа BOOK . Полученное значение формируется как входящий параметр-ссылка на тип BOOK . Также функция получает параметром имя файла для чтения. Для чтения структурной переменной используется функция read() .
Результат работы программы
8. Пример записи/чтения массива чисел типа double
- запись в файл массива M чисел типа double функцией write() ;
- чтение из файла массива чисел типу double функцией read() .
Файл открывается в двоичном формате.
Результат работи программы:
9. Пример чтения из файла строк. Функция getline()
10. Пример чтения строк из файла. Функции getline() + eof()
В примере реализована функция Example10() , которая выполняет чтение строк из файла. Файл открывается в текстовом формате. Имя файла задается входящим параметром функции. Определение конца файла выполняется с помощью функции eof() .
Запись объекта класса в файл
Здравствуйте, может кто-нибудь помочь с данным вопросом? Как мне записать в файл строку, которая.
Запись объекта класса в файл
Доброго времени суток! нужно сохранить объект вот такого класса: class Act < public: .
Запись и чтение объекта класса в файл и из файла
У меня есть std::list состоящий из объектов типа Person это база о людях. Нужно реализовать два.
Решение
Добавлено через 22 минуты
Полезные штуки про read и write.
А еще, если ты хочешь массив писать на файл, то я бы на твоем месте записал каждый объект построчно, так и читать удобно через код, и выглядит красиво в файле.
Что-то на подобии этого я имею ввиду:
Такс, описанный выше пример это примерные поля моего класса.
Класс является неким представлением чисел с плавающей точкой (double).
Что я делал раньше, вычислял в цикле выражения,которые имеют тип double,далее типы double эти переводил к моему типу myClass допустим, и выполнял операцию между ними определенную для класса myClass.В итоге получал результат типа myClass.
Теперь я хочу не вычислять в цикле выражения типа double и не переводить к типу myClass,а сразу записать в файл нужные элементы типа myClass.То есть в файле хранятся элементы типа myClass.
Потом отдельно я что делаю,читаю данные с файла и выполняю над ними операцию! (То есть не делаю вычисления и приведения к типу myClass).
Вот и вопрос работа с файлом быстро происходит?Смогу ли я выиграть время,по сравнению с вычислением и приведением к типу.
Оригинальная версия продукта: Visual Studio
Исходный номер КБ: 816149
Аннотация
В разделе Чтение текстовых файлов этой статьи описывается, как использовать класс для чтения StreamReader текстового файла. Разделы Write a text file (пример 1) и разделы Write a text file (пример 2) описывают, как использовать класс для записи StreamWriter текста в файл.
Чтение текстового файла
Следующий код использует класс для открытия, чтения и закрытия StreamReader текстового файла. Вы можете передать путь текстового файла конструктору, чтобы StreamReader открыть его автоматически. Метод читает каждую строку текста и приращение указателя файла к следующей строке по ReadLine мере чтения. Когда метод достигает конца файла, он возвращает ReadLine ссылку null. Дополнительные сведения см. в группе StreamReader Class.
Создайте пример текстового файла в Блокнот. Выполните приведенные ниже действия.
- Вклеить текст hello world в Блокнот.
- Сохраните файл как Sample.txt.
Начните Microsoft Visual Studio.
В меню File указать на New, а затем выбрать Project.
Добавьте следующий код в начале файла Class1.cs:
Добавьте в метод следующий Main код:
В меню Отлаговка выберите Пуск для компиляции и запуска приложения. Нажмите КНОПКУ ВВОД, чтобы закрыть окно консоли. В окне Консоли отображается содержимое файла Sample.txt:
Написать текстовый файл (пример 1)
Следующий код использует класс для открытия, записи и закрытия StreamWriter текстового файла. Аналогично классу, вы можете передать путь текстового файла конструктору, чтобы открыть StreamReader StreamWriter его автоматически. Метод WriteLine записывает полную строку текста в текстовый файл.
Запустите Visual Studio.
В меню File указать на New, а затем выбрать Project.
Добавьте следующий код в начале файла Class1.cs:
Добавьте в метод следующий Main код:
В меню Отлаговка выберите Пуск для компиляции и запуска приложения. Этот код создает файл, которыйTest.txt на диске C. Open Test.txt в текстовом редакторе, например Блокнот. Test.txt содержит две строки текста:
Написать текстовый файл (пример 2)
Следующий код использует класс для открытия, записи и закрытия StreamWriter текстового файла. В отличие от предыдущего примера, этот код передает конструктору два дополнительных параметра. Первый параметр — путь к файлу и имя файла. Второй параметр true указывает, что файл открыт в режиме приложения. Если вы указываете для второго параметра, содержимое файла перезаписывается при каждом запуске false кода. Третий параметр Unicode указывает, чтобы StreamWriter кодировать файл в формате Unicode. Можно также указать следующие методы коди-кодинга для третьего параметра:
Метод похож на метод, за исключением того, что метод не автоматически встраит комбинацию символов возврата или строки Write WriteLine Write (CR/LF). Это полезно, когда нужно одновременно писать по одному символу.
Запустите Visual Studio.
В меню Файл выберите пункт Создать и затем пункт Проект.
Добавьте следующий код в начале файла Class1.cs:
Добавьте в метод следующий Main код:
В меню Отлаговка выберите Пуск для компиляции и запуска приложения. Этот код создает файл, которыйTest1.txt на диске C. Open Test1.txt в текстовом редакторе, например Блокнот. Test1.txt содержит одну строку текста: 0123456789.
Полное перечисление кода для чтения текстового файла
Полное перечисление кода для записи текстового файла (версия 1)
Полное перечисление кода для записи текстового файла (версия 2)
Устранение неполадок
Для всех манипуляций с файлами, это хорошая практика программирования, чтобы обернуть код в блок try-catch-finally для обработки ошибок и исключений. В частности, может потребоваться освободить ручки для файла в окончательном блоке, чтобы файл не был заблокирован на неопределенный срок. Некоторые возможные ошибки включают файл, который не существует, или файл, который уже используется.
Дан файл «Input.txt», в котором каждая строка имеет значения, аналогичные переменным экземпляра класса.
Прочитайте значения в объект класса и выполните необходимые операции.
using namespace std;
// Класс для определения свойств
int Age, Ratings;
// Объявление функции input () для ввода информации
// Объявление функции output_highest_rated () для
// извлекать информацию из файла базы данных
// Определение функции input () для ввода информации
// Объект для записи в файл
// Открытие файла в режиме добавления
file_obj.open( "Input.txt" , ios::app);
// Объект участника класса для ввода данных в файл
// Подача соответствующих данных в переменные
string str = "Micheal" ;
int age = 18, ratings = 2500;
// Назначение данных в объект
// Запись данных объекта в файл
file_obj.write(( char *)&obj, sizeof (obj));
// Подача соответствующих данных в переменные
// Назначение данных в объект
// Запись данных объекта в файл
file_obj.write(( char *)&obj, sizeof (obj));
// Определение функции output_highest_rated () для
// извлекать информацию из файла базы данных
// Объект для чтения из файла
// Открытие файла в режиме ввода
file_obj.open( "Input.txt" , ios::in);
// Объект участника класса для ввода данных в файл
// Чтение из файла в объект "obj"
file_obj.read(( char *)&obj, sizeof (obj));
// максимум, чтобы сохранить максимальные оценки
// Highest_rated хранит имя участника с самым высоким рейтингом
// Проверяем, пока у нас нет корма
// Назначаем максимальные рейтинги
if (obj.Ratings > max)
file_obj.read(( char *)&obj, sizeof (obj));
// Выход - участник с самым высоким рейтингом
// Создание объекта класса
// Извлечение участника с максимальным рейтингом
Пожалуйста, пишите комментарии, если вы обнаружите что-то неправильное, или вы хотите поделиться дополнительной информацией по обсуждаемой выше теме.
Хедер fstream предоставляет функционал для считывания данных из файла и для записи в файл. В целом он очень похож на хедер iostream , который работает с консолью, поскольку консоль это тоже файл. Поэтому все основные операции такие же, за мелкими отличиями, как в предыдущей теме по iostream.
Наиболее частые операции следующее:
- Методы проверки открыт ли файл is_open() и достигнут ли конец файла eof()
- Настройка форматированного вывода для >> с помощью width() и precision()
- Операции позиционирования tellg(), tellp() и seekg(), seekp()
Это не все возможности, которые предоставляет библиотека fstream. Рассматривать все сейчас мы не будем, поскольку их круг применения достаточно узок. Познакомимся с вышеперечисленными. Начнем с класса чтения.
Класс ifstream
Открытие файла в конструкторе выглядит так:
ifstream file ( "d:\\1\\файл.txt" ) ; // открываем файл в конструктореТак мы просим открыть файл txt с именем файл.txt, который лежит в папке с названием 1, а папка находится на диске d.
Использование метода open() удобно, если программист не хочет сразу привязываться к файлу. Вдруг нужно свойство класса или глобальную переменную, ну а открывать файл уже потом. Если же нужно открыть файл внутри некой функции, поработать с ним и закрыть, то можно прописать путь к файлу прямо в конструкторе. В общем зависит от ситуации.
Так все отработает нормально и файл откроется:
Второй вариант проверки с использованием метода is_open() :
Метод is_open() вернет 1, если файл найден и успешно открыт. Иначе вернет 0 и сработает код прописанный в блоке else .
Если файл успешно открыт, из него можно производить чтение.
Оператор считывания >>
Так же как и в iostream считывание можно организовать оператором >> , который указывает в какую переменную будет произведено считывание:
Считает вещественное, целое и строку. Считывание строки закончится, если появится пробел или конец строки. Стоит отметить, что оператор >> применяется к текстовым файлам. Считывание из бинарного файла производить лучше всего с помощью метода read().
Кстати этот оператор достаточно удобен, если стоит задача разделить файл на слова:
Методы getline() и get()
Считывание целой строки до перевода каретки производится так же как и в iostream методом getline(). Причем рекомендуется использовать его переопределеную версию в виде функции, если считывается строка типа string:
Если же читать нужно в массив символов char[], то либо get() либо getline() именно как методы:
Принцип в общем тот же, что и в аналогах из iostream: Указывается в параметрах буфер (переменная, куда будет производиться чтение), или точнее указатель на блок памяти (если переменная объявлена статически: char buffer[255] к примеру, то пишется в параметры &buffer), указывается максимальное количество считываемого (в примере это n), дабы не произошло переполнение и выход за пределы буфера и по необходимости символ-разделитель, до которого будет считка (в примере это пробел). Надеюсь я не больно наступлю на хобот фанатикам Си, если сажу что эти две функции на 99% взаимозаменяемы, и на 95% могут быть заменены методом read() .
Метод read()
Похож на предыдущий пример?
Метод close()
Метод eof()
Проверяет не достигнут ли конец файла. Т.е. можно ли из него продолжать чтение. Выше пример с считкой слов оператором >> как раз использует такую проверку.
Метод seekg()
Производит установку текущей позиции в нужную, указываемую числом. В этот метод так же передается способ позиционирования:
Читайте также: