Создание и чтение файлов в C++
В сегодняшней статье мы рассмотрим, как создать и прочитать данные из файла в С++. И для работы с файлами в С++ существует библиотека кода fstream.
Чтобы использовать библиотеку fstream, подключите как стандартный файл , так и заголовочный файл :
#include <iostream>
#include <fstream>
В библиотеку fstream включены три класса, которые используются для создания, записи или чтения файлов:
Описание класса
ofstream — Создает и записывает в файлы
ifstream — Читает из файлов
fstream — Комбинация ofstream и ifstream: создание, чтение и запись в файлы.
Создание и запись файла
Чтобы создать файл, используйте класс ofstream или fstream и укажите имя файла.
Для записи в файл используйте оператор вставки (<<).
#include <iostream>
#include <fstream>
using namespace std;
int main() <
// создание и открытие текстового файла
ofstream MyFile("filename.txt");
// Запись в файл
MyFile << "Hello, from Myrusakov!";
// Закрытие файла
MyFile.close();
>
Почему мы закрываем файл?
Это считается хорошей практикой и может очистить ненужное пространство памяти.
Чтение из файла.
Для чтения из файла используйте класс ifstream или fstream и имя файла.
Обратите внимание, что мы также используем цикл while вместе с функцией getline() (которая принадлежит классу ifstream) для чтения файла построчно и для печати содержимого файла:
// Создание строковой переменной, для вывода содержимого файла
string myText;
// Чтение из текстового файла
ifstream MyReadFile("filename.txt");
// Использование цикла while совместно с функцией getline() для построчного чтения файла
while (getline (MyReadFile, myText)) <
// вывод текста из файла
cout << myText;
>
// Закрытие файла
MyReadFile.close();
Таким образом, мы создали и прочитали данные из файла в C++.
Копирование материалов разрешается только с указанием автора (Михаил Русаков) и индексируемой прямой ссылкой на сайт (http://myrusakov.ru)!
Добавляйтесь ко мне в друзья ВКонтакте: http://vk.com/myrusakov.
Если Вы хотите дать оценку мне и моей работе, то напишите её в моей группе: http://vk.com/rusakovmy.
Если Вы не хотите пропустить новые материалы на сайте,
то Вы можете подписаться на обновления: Подписаться на обновления
Если у Вас остались какие-либо вопросы, либо у Вас есть желание высказаться по поводу этой статьи, то Вы можете оставить свой комментарий внизу страницы.
Порекомендуйте эту статью друзьям:
Если Вам понравился сайт, то разместите ссылку на него (у себя на сайте, на форуме, в контакте):
Она выглядит вот так:
Комментарии ( 0 ):
Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.
Работа с файлами в С++
Большинство компьютерных программ работают с файлами, и поэтому возникает необходимость создавать, удалять, записывать читать, открывать файлы. Что же такое файл? Файл – именованный набор байтов, который может быть сохранен на некотором накопителе. Ну, теперь ясно, что под файлом понимается некоторая последовательность байтов, которая имеет своё, уникальное имя, например файл.txt . В одной директории не могут находиться файлы с одинаковыми именами. Под именем файла понимается не только его название, но и расширение, например: file.txt и file.dat — разные файлы, хоть и имеют одинаковые названия. Существует такое понятие, как полное имя файлов – это полный адрес к директории файла с указанием имени файла, например: D:\docs\file.txt . Важно понимать эти базовые понятия, иначе сложно будет работать с файлами.
Для работы с файлами необходимо подключить заголовочный файл <fstream> . В <fstream> определены несколько классов и подключены заголовочные файлы <ifstream> — файловый ввод и <ofstream> — файловый вывод.
Файловый ввод/вывод аналогичен стандартному вводу/выводу, единственное отличие – это то, что ввод/вывод выполнятся не на экран, а в файл. Если ввод/вывод на стандартные устройства выполняется с помощью объектов cin и cout , то для организации файлового ввода/вывода достаточно создать собственные объекты, которые можно использовать аналогично операторам cin и cout .
Например, необходимо создать текстовый файл и записать в него строку Работа с файлами в С++ . Для этого необходимо проделать следующие шаги:
- создать объект класса ofstream ;
- связать объект класса с файлом, в который будет производиться запись;
- записать строку в файл;
- закрыть файл.
Почему необходимо создавать объект класса ofstream , а не класса ifstream ? Потому, что нужно сделать запись в файл, а если бы нужно было считать данные из файла, то создавался бы объект класса ifstream .
Назовём объект – fout , Вот что получится:
Для чего нам объект? Объект необходим, чтобы можно было выполнять запись в файл. Уже объект создан, но не связан с файлом, в который нужно записать строку.
Через операцию точка получаем доступ к методу класса open(), в круглых скобочках которого указываем имя файла. Указанный файл будет создан в текущей директории с программой. Если файл с таким именем существует, то существующий файл будет заменен новым. Итак, файл открыт, осталось записать в него нужную строку. Делается это так:
Используя операцию передачи в поток совместно с объектом fout строка Работа с файлами в С++ записывается в файл. Так как больше нет необходимости изменять содержимое файла, его нужно закрыть, то есть отделить объект от файла.
Итог – создан файл со строкой Работа с файлами в С++ .
Шаги 1 и 2 можно объединить, то есть в одной строке создать объект и связать его с файлом. Делается это так:
Объединим весь код и получим следующую программу.
Осталось проверить правильность работы программы, а для этого открываем файл cppstudio.txt и смотрим его содержимое, должно быть — Работа с файлами в С++ .
Для того чтобы прочитать файл понадобится выполнить те же шаги, что и при записи в файл с небольшими изменениями:
- создать объект класса ifstream и связать его с файлом, из которого будет производиться считывание;
- прочитать файл;
- закрыть файл.
В программе показаны два способа чтения из файла, первый – используя операцию передачи в поток, второй – используя функцию getline() . В первом случае считывается только первое слово, а во втором случае считывается строка, длинной 50 символов. Но так как в файле осталось меньше 50 символов, то считываются символы включительно до последнего. Обратите внимание на то, что считывание во второй раз ( строка 17 ) продолжилось, после первого слова, а не с начала, так как первое слово было прочитано в строке 14 . Результат работы программы показан на рисунке 1.
Рисунок 1 — Работа с файлами в С++
Программа сработала правильно, но не всегда так бывает, даже в том случае, если с кодом всё впорядке. Например, в программу передано имя несуществующего файла или в имени допущена ошибка. Что тогда? В этом случае ничего не произойдёт вообще. Файл не будет найден, а значит и прочитать его не возможно. Поэтому компилятор проигнорирует строки, где выполняется работа с файлом. В результате корректно завершится работа программы, но ничего, на экране показано не будет. Казалось бы это вполне нормальная реакции на такую ситуацию. Но простому пользователю не будет понятно, в чём дело и почему на экране не появилась строка из файла. Так вот, чтобы всё было предельно понятно в С++ предусмотрена такая функция — is_open() , которая возвращает целые значения: 1 — если файл был успешно открыт, 0 — если файл открыт не был. Доработаем программу с открытием файла, таким образом, что если файл не открыт выводилось соответствующее сообщение.
Результат работы программы показан на рисунке 2.
Рисунок 2 — Работа с файлами в С++
Как видно из рисунка 2 программа сообщила о невозможности открыть файл. Поэтому, если программа работает с файлами, рекомендуется использовать эту функцию, is_open() , даже, если уверены, что файл существует.
Режимы открытия файлов
Режимы открытия файлов устанавливают характер использования файлов. Для установки режима в классе ios_base предусмотрены константы, которые определяют режим открытия файлов (см. Таблица 1).
Константа | Описание |
---|---|
ios_base::in | открыть файл для чтения |
ios_base::out | открыть файл для записи |
ios_base::ate | при открытии переместить указатель в конец файла |
ios_base::app | открыть файл для записи в конец файла |
ios_base::trunc | удалить содержимое файла, если он существует |
ios_base::binary | открытие файла в двоичном режиме |
Режимы открытия файлов можно устанавливать непосредственно при создании объекта или при вызове функции open() .
Режимы открытия файлов можно комбинировать с помощью поразрядной логической операции или | , например: ios_base::out | ios_base::trunc — открытие файла для записи, предварительно очистив его.
Объекты класса ofstream , при связке с файлами по умолчанию содержат режимы открытия файлов ios_base::out | ios_base::trunc . То есть файл будет создан, если не существует. Если же файл существует, то его содержимое будет удалено, а сам файл будет готов к записи. Объекты класса ifstream связываясь с файлом, имеют по умолчанию режим открытия файла ios_base::in — файл открыт только для чтения. Режим открытия файла ещё называют — флаг, для удобочитаемости в дальнейшем будем использовать именно этот термин. В таблице 1 перечислены далеко не все флаги, но для начала этих должно хватить.
Обратите внимание на то, что флаги ate и app по описанию очень похожи, они оба перемещают указатель в конец файла, но флаг app позволяет производить запись, только в конец файла, а флаг ate просто переставляет флаг в конец файла и не ограничивает места записи.
Разработаем программу, которая, используя операцию sizeof() , будет вычислять характеристики основных типов данных в С++ и записывать их в файл. Характеристики:
- число байт, отводимое под тип данных
- максимальное значение, которое может хранить определённый тип данных.
Запись в файл должна выполняться в таком формате:
Такая программа уже разрабатывалась ранее в разделе Типы данных С++ , но там вся информация о типах данных выводилась на стандартное устройство вывода, а нам необходимо программу переделать так, чтобы информация записывалась в файл. Для этого необходимо открыть файл в режиме записи, с предварительным усечением текущей информации файла (строка 14). Как только файл создан и успешно открыт (строки 16 — 20), вместо оператора cout , в строке 22 используем объект fout . таким образом, вместо экрана информация о типах данных запишется в файл.
Нельзя не заметить, что изменения в программе минимальны, а всё благодаря тому, что стандартный ввод/вывод и файловый ввод/вывод используются абсолютно аналогично. В конце программы, в строке 45 мы явно закрыли файл, хотя это и не обязательно, но считается хорошим тоном программирования. Стоит отметить, что все функции и манипуляторы используемые для форматирования стандартного ввода/вывода актуальны и для файлового ввода/вывода. Поэтому не возникло никаких ошибок, когда оператор cout был заменён объектом fout .
Как создать текстовый файл?
Как создать текстовый файл?
и как записывать в нем данные?
Как создать текстовый файл в определённой директории на диске?
Ребят помогите,как создать текстовый файл в определённой директории на диске C.
Создать текстовый файл. Сформировать новый файл
Задание.Создать текстовый файл. Сформировать новый файл, элементы которо¬го указывают длину.
Дано целое число N и текстовый файл. Создать новый файл, содержащий все слова длины N из исходного файла
Помогите, пожалуйста, с задачей :sigh: Дано целое число N и текстовый файл. Создать новый файл.
Сообщение было отмечено как решение
Решение
Kosyak3x
смотри System.IO — там все методы для работы с файлами.
и мне нужно чтобы в файл записывался список. а оно записывается все в одну строку.
Добавлено через 20 минут
уже придумал.
Сообщение было отмечено как решение
Решение
names и fullnames это таблицы одна с именами файлов — другая с полными путями до них
получается вот такой файлик откуда легко можно извлечь нужные данные
Сообщение от erlik
Сообщение от erlik
а v и d это тут что?
Добавлено через 10 минут
все, разобрался что к чему
Обьясните в чем разница между этими двумя способами.Если я правильно понимаю ситуацию.
Сообщение было отмечено как решение
Решение
Сообщение от SKIER
Создает файл в указанной директории.
Сообщение от SKIER
Сообщение от SKIER
Дабы не плодить темы решил в этой спросить.
Добавление информации в файл понятно как делать.
Вот собственно:
А как сделать перезапись(старую инфу в файле стираем новую записываем):
что я имею ввиду, если использовать эту запись:
Сообщение от SKIER
А как сделать перезапись(старую инфу в файле стираем новую записываем):
что я имею ввиду, если использовать эту запись:
Сообщение от SKIER
Обьясните в чем разница между этими двумя способами.Если я правильно понимаю ситуацию.
Не могу создать текстовый файл
Не могу создать текстовый файл в c#, написал диск С, потому что там находится папка Repos,что я.
Создать текстовый файл используя using
Подскажите как создать текстовый файл при помощи using с совместным доступом на чтение и запись.
Создать текстовый файл и написать в нём
Нужно создать текстовый файл и написать в нём информацию. как это сделать?
Создать текстовый файл и открыть его
Нужно реализовать одну функцию, есть кусок кода, который создаёт текстовый файл и записывает в него.
Работа с файловой системой в C#. Работа с файлами (классы File и FileInfo)
Аналогично тому, как организована работа с каталогами в C#, для работы с файлами в пространстве имен System.IO предусмотрено два класса для работы с файлами — File и FileInfo . Рассмотрим как можно использовать эти классы при работе с файловой системой в C#. Однако, прежде, чем мы приступим к рассмотрению функциональности новых классов, необходимо рассмотреть вопрос о том, как получить список файлов в определенном каталоге.
DirectoryInfo (продолжение)
При рассмотрении вопросов, связанных с работой с каталогами файловой системы в C# мы оставили не рассмотренным вопрос о том, как получить список файлов в директории. Рассмотрим этот вопрос сейчас. В самом простом случае, мы можем воспользоваться методом GetFiles() , например, так:
В этом случае программа выдаст нам список всех файлов находящихся в определенном каталоге. В приведенном выше примере вывод консоли будет примерно следующим:
То есть, при использовании метода GetFiles() без параметров просматривается только конкретный каталог. У метода GetFiles() имеется ряд переопределенных версий, позволяющих организовать поиск вглубь для того, чтобы вывести список файлов, находящихся не только в конкретном каталоге, но и во всех поддиректориях. Например, просмотрим все файлы в каталоге C:\Program Files (x86)
Здесь мы воспользовались переопределенной версией метода GetFiles() у которого первый параметр представляет собой маску по которой будут искаться файлы (например, мы могли бы задать вот такую маску для поиска только текстовых файлов — « *.txt «), а второй параметр — настройки поиска (в нашем случае — это SearchOption.AllDirectories , что указывает на то, что поиск будет вестись по всех каталогам).
Отдельное внимание стоит уделить такому моменту: если вы попытаетесь провести поиск как в примере по всем каталогам на диске C:\ , то можете столкнуться ситуацией, когда программа вместо списка файлов выдаст вам исключение типа «Access to the path ‘c:\Documents and Settings’ is denied.» Это связано с тем, что для каждой директории в Windows можно установить права доступа для определенных пользователей и наша программа на C# не может зайти в директорию так как не обладает достаточными для этого правами. Самый простой способ избежать это исключение состоит в том, чтобы организовать свой рекурсивный обход дерева каталогов. Этот момент мы с вами также рассмотрим в последующих статьях. Ну а теперь перейдем непосредственно к нашей теме.
Класс FileInfo
Ниже представлены наиболее часто используемые свойства и методы работы с файлами посредством класса FileInfo :
- CopyTo(path) — копирует файл в новое место по указанному пути path
- Create() — создает файл
- Delete() — удаляет файл
- MoveTo(destFileName) — перемещает файл в новое место
- Свойство Directory — получает родительский каталог в виде объекта DirectoryInfo
- Свойство DirectoryName — получает полный путь к родительскому каталогу
- Свойство Exists — указывает, существует ли файл
- Свойство Length — получает размер файла в байтах
- Свойство Extension — получает расширение файла
- Свойство Name — получает имя файла
- Свойство FullName — получает полное имя файла
Как в C# создать файл и записать в него данные?
Для создания нового файла и записи в него данных можно воспользоваться методом Create() :
Или же, если мы точно знаем, что нам необходим текстовый файл, то воспользоваться методом CreateText() :
В отличие от Create() метод CreateText() возвращает нам объект типа StreamWriter , который предоставляет удобные методы и свойства для работы в том числе и со строками, поэтому во втором примере нам не понадобилось преобразовывать строку в массив байтов для записи в файл. В свою очередь, метод Create() удобно использовать для записи бинарных файлов.
Как в C# получить информацию о файле?
Чтобы получить информацию о файле мы можем воспользоваться свойствами класса FileInfo , например, как показано ниже:
Как в C# переместить файл в новое место?
Для перемещения файла в другой каталог в C# используется метод MoveTo() :
Перед тем, как перемещать файл в другой каталог необходимо обязательно проверить существование этого каталога на диске и, если каталог отсутствует, то создать его, иначе мы получим исключение.
Как в C# копировать файл?
Копирование файла в C# осуществляется с помощью метода CopyTo() :
Методы CopyTo() и MoveTo() класса FileInfo также имет переопределенные версии в которых вторым параметром выступает параметр булевого типа ( bool ) который указывает на то, необходимо ли перезаписать содержимое файла, если он уже содержится по указанному пути. Если этот параметр равен false (или используется метод с одним параметром), то при обнаружении по новому пути указанного файла C# сгенерирует исключение.
Как в C# удалить файл?
Для удаления файла с диска в C# используется метод Delete() :
Класс File
Класс File реализует схожую с FileInfo функциональность, однако, как и в случае работы с каталогами, этот класс рекомендуется использовать если вам необходима проверка безопасности используемых методов по работе с файлом и вы не планируете использовать класс многократно. Основные методы работы с файлами в C# с использованием класса File следующие:
- Copy() — копирует файл в новое место
- Create() — создает файл
- Delete() — удаляет файл
- Move() — перемещает файл в новое место
- Exists(file) — определяет, существует ли файл
Подробно описывать работу каждого методы не будем, так как они реализуют ровно те же операции, что и в классе FileInfo .
Итого
Рассмотрели работу с файлами в C#, остановившись подробнее на работе с классом FileInfo . Научились создавать файлы и записывать в них данные, перемещать, копировать и удалять файлы в C#, а также получать информацию о конкретном файле.