Главная страница » Как создать файл c

Как создать файл c

  • автор:

Создание и чтение файлов в C++

Создание и чтение файлов в 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 .

Например, необходимо создать текстовый файл и записать в него строку Работа с файлами в С++ . Для этого необходимо проделать следующие шаги:

  1. создать объект класса ofstream ;
  2. связать объект класса с файлом, в который будет производиться запись;
  3. записать строку в файл;
  4. закрыть файл.

Почему необходимо создавать объект класса ofstream , а не класса ifstream ? Потому, что нужно сделать запись в файл, а если бы нужно было считать данные из файла, то создавался бы объект класса ifstream .

Назовём объект – fout , Вот что получится:

Для чего нам объект? Объект необходим, чтобы можно было выполнять запись в файл. Уже объект создан, но не связан с файлом, в который нужно записать строку.

Через операцию точка получаем доступ к методу класса open(), в круглых скобочках которого указываем имя файла. Указанный файл будет создан в текущей директории с программой. Если файл с таким именем существует, то существующий файл будет заменен новым. Итак, файл открыт, осталось записать в него нужную строку. Делается это так:

Используя операцию передачи в поток совместно с объектом fout строка Работа с файлами в С++ записывается в файл. Так как больше нет необходимости изменять содержимое файла, его нужно закрыть, то есть отделить объект от файла.

Итог – создан файл со строкой Работа с файлами в С++ .

Шаги 1 и 2 можно объединить, то есть в одной строке создать объект и связать его с файлом. Делается это так:

Объединим весь код и получим следующую программу.

Осталось проверить правильность работы программы, а для этого открываем файл cppstudio.txt и смотрим его содержимое, должно быть — Работа с файлами в С++ .

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

  1. создать объект класса ifstream и связать его с файлом, из которого будет производиться считывание;
  2. прочитать файл;
  3. закрыть файл.

В программе показаны два способа чтения из файла, первый – используя операцию передачи в поток, второй – используя функцию getline() . В первом случае считывается только первое слово, а во втором случае считывается строка, длинной 50 символов. Но так как в файле осталось меньше 50 символов, то считываются символы включительно до последнего. Обратите внимание на то, что считывание во второй раз ( строка 17 ) продолжилось, после первого слова, а не с начала, так как первое слово было прочитано в строке 14 . Результат работы программы показан на рисунке 1.

Рисунок 1 — Работа с файлами в С++

Программа сработала правильно, но не всегда так бывает, даже в том случае, если с кодом всё впорядке. Например, в программу передано имя несуществующего файла или в имени допущена ошибка. Что тогда? В этом случае ничего не произойдёт вообще. Файл не будет найден, а значит и прочитать его не возможно. Поэтому компилятор проигнорирует строки, где выполняется работа с файлом. В результате корректно завершится работа программы, но ничего, на экране показано не будет. Казалось бы это вполне нормальная реакции на такую ситуацию. Но простому пользователю не будет понятно, в чём дело и почему на экране не появилась строка из файла. Так вот, чтобы всё было предельно понятно в С++ предусмотрена такая функция — is_open() , которая возвращает целые значения: 1 — если файл был успешно открыт, 0 — если файл открыт не был. Доработаем программу с открытием файла, таким образом, что если файл не открыт выводилось соответствующее сообщение.

Результат работы программы показан на рисунке 2.

Рисунок 2 — Работа с файлами в С++

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

Режимы открытия файлов

Режимы открытия файлов устанавливают характер использования файлов. Для установки режима в классе ios_base предусмотрены константы, которые определяют режим открытия файлов (см. Таблица 1).

Таблица 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() , будет вычислять характеристики основных типов данных в С++ и записывать их в файл. Характеристики:

  1. число байт, отводимое под тип данных
  2. максимальное значение, которое может хранить определённый тип данных.

Запись в файл должна выполняться в таком формате:

Такая программа уже разрабатывалась ранее в разделе Типы данных С++ , но там вся информация о типах данных выводилась на стандартное устройство вывода, а нам необходимо программу переделать так, чтобы информация записывалась в файл. Для этого необходимо открыть файл в режиме записи, с предварительным усечением текущей информации файла (строка 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#, а также получать информацию о конкретном файле.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *