Работа с файлами

Содержание

Работа с файлами в си ввод и вывод в файл в си

Работа с файлами в си

В этой статье мы узнаем, как считывать данные из файлов и записывать информацию в файлы в программах си. Файлы в си используются для того, чтобы сохранять результат работы программы си и использовать его при новом запуске программы . Например можно сохранять результаты вычислений , статистику игр.
Чтобы работать с файлами в си необходимо подключить библиотеку stdio.h
#include
Чтобы работать с файлом в си необходимо задать указатель на файл по образцу
FILE *имя указателя на файл;
Например
FILE *fin;
Задает указатель fin на файл
Дальше необходимо открыть файл и привязать его к файловому указателю. Для открытия файла в си на чтение используется команда
Имя указателя на файл= fopen(«путь к файлу», «r»);
Например следующая команда
fin = fopen(«C:\\Users\\user\\Desktop\\data.txt», «r»);
откроет файл data.txt, находящийся на рабочем столе по пути C:\\Users\\user\\Desktop Чтобы узнать путь к файлу можно выбрать файл мышью нажать на правую кнопку мыши и выбрать свойства файла. В разделе Расположение будет указан путь к файлу. Обратите внимание , что в си путь указывается с помощью двух слешей.
После работы с файлом в си , необходимо его закрыть с помощью команды
fclose(имя указателя на файл)

Считывание информации из текстового файла в Си

Чтобы можно было считывать русские символы из файла, необходимо настроить работу с Кириллицей с помощью команды
setlocale(LC_ALL, «Russian»);

При этом необходимо в начале программы подключить #include

Работа с файлами

БлогNot. Лекции по C/C++: работа с файлами (fstream)

Лекции по C/C++: работа с файлами (fstream)

Механизм ввода-вывода, разработанный для обычного языка С, не соответствует общепринятому сегодня стилю объектно-ориентированного программирования, кроме того, он активно использует операции с указателями, считающиеся потенциально небезопасными в современных защищённых средах выполнения кода. Альтернативой при разработке прикладных приложений является механизм стандартных классов ввода-вывода, предоставляемый стандартом языка C++.

Наиболее часто применяются классы ifstream для чтения, ofstream для записи и fstream для модификации файлов.

Все поточные классы ввода-вывода являются косвенными производными от общего предка ios , полностью наследуя его функциональность. Так, режим открытия файлов задает член данных перечисляемого типа open_mode, который определяется следующим образом:

Ниже приведены возможные значения флагов и их назначение.

Режим Назначение
in Открыть для ввода (выбирается по умолчанию для ifstream)
out Открыть для вывода (выбирается по умолчанию для ofstream)
binary Открыть файл в бинарном виде
aрр Присоединять данные; запись в конец файла
ate Установить файловый указатель на конец файла
trunc Уничтожить содержимое, если файл существует (выбирается по умолчанию, если флаг out указан, а флаги ate и арр — нет)

Например, чтобы открыть файл с именем test.txt для чтения данных в бинарном виде, следует написать:

Оператор логического ИЛИ ( | ) позволяет составить режим с любым сочетанием флагов. Так, чтобы, открывая файл по записи, случайно не затереть существующий файл с тем же именем, надо использовать следующую форму:

Предполагается, что к проекту подключён соответствующий заголовочный файл:

Для проверки того удалось ли открыть файл, можно применять конструкцию

Операторы включения и извлечения

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

Можно также записывать текстовую строку по частям:

Оператор endl завершает ввод строки символом «возврат каретки»:

С помощью оператора включения несложно записывать в файл значения переменных или элементов массива:

В результате выполнения кода образуется три строки текстового файла Temp.txt :

Обратите внимание, что числовые значения записываются в файл в виде текстовых строк, а не двоичных значений.

Оператор извлечения ( >> )производит обратные действия. Казалось бы, чтобы извлечь символы из файла Temp.txt , записанного ранее, нужно написать код наподобие следующего:

Однако оператор извлечения остановится на первом попавшемся разделителе (символе пробела, табуляции или новой строки). Таким образом, при разборе предложения «Текстовый массив содержит переменные» только слово «Текстовый» запишется в массив buff , пробел игнорируется, а слово «массив» станет значением целой переменной vx и исполнение кода «пойдет вразнос» с неминуемым нарушением структуры данных. Далее, при обсуждении класса ifstream , будет показано, как правильно организовать чтение файла из предыдущего примера.

Класс ifstream: чтение файлов

Как следует из расшифровки названия, класс ifstream предназначен для ввода файлового потока. Далее перечислены основные методы класса. Большая часть из них унаследована от класса istream и перегружена с расширением родительской функциональности. К примеру, функция get , в зависимости от параметра вызова, способна считывать не только одиночный символ, но и символьный блок.

Метод Описание
open Открывает файл для чтения
get Читает один или более символов из файла
getline Читает символьную строку из текстового файла или данные из бинарного файла до определенного ограничителя
read Считывает заданное число байт из файла в память
eof Возвращает ненулевое значение (true), когда указатель потока достигает конца файла
peek Выдает очередной символ потока, но не выбирает его
seekg Перемещает указатель позиционирования файла в заданное положение
tellg Возвращает текущее значение указателя позиционирования файла
close Закрывает файл

Теперь понятно, как нужно модифицировать предыдущий пример, чтобы использование оператора извлечения данных давало ожидаемый результат:

Метод getline прочитает первую строку файла до конца, а оператор >> присвоит значения переменным.

Следующий пример показывает добавление данных в текстовый файл с последующим чтением всего файла. Цикл while (1) используется вместо while(!file2.eof()) по причинам, которые обсуждались в предыдущей лекции.

В следующем примере показан цикл считывания строк из файла test.txt и их отображения на консоли.

Этот код под ОС Windows также зависит от наличия в последней строке файла символа перевода строки, надежнее было бы сделать так:

Явные вызовы методов open и close не обязательны. Действительно, вызов конструктора с аргументом позволяет сразу же, в момент создания поточного объекта file , открыть файл:

Вместо метода close можно использовать оператор delete , который автоматически вызовет деструктор объекта file и закроет файл. Код цикла while обеспечивает надлежащую проверку признака конца файла.

Класс ofstream: запись файлов

Класс ofstream предназначен для вывода данных из файлового потока. Далее перечислены основные методы данного класса.

Метод Описание
open Открывает файл для записи
put Записывает одиночный символ в файл
write Записывает заданное число байт из памяти в файл
seekp Перемещает указатель позиционирования в указанное положение
tellp Возвращает текущее значение указателя позиционирования файла
close Закрывает файл

Описанный ранее оператор включения удобен для организации записи в текстовый файл:

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

Первый параметр методов write и read (адрес блока записи/чтения) должен иметь тип символьного указателя char * , поэтому необходимо произвести явное преобразование типа адреса структуры void * . Второй параметр указывает, что бинарные блоки файла имеют постоянный размер байтов независимо от фактической длины записи. Следующее приложение дает пример создания и отображения данных простейшей записной книжки. Затем записи файла последовательно считываются и отображаются на консоли.

В результате выполнения этого кода образуется бинарный файл Notebook.dat из трех блоков размером по 80 байт каждый (при условии, что символы — однобайтовые). Естественно, вы можете использовать другие поточные методы и проделывать любые операции над полями определенной структуры данных.

Класс fstream: произвольный доступ к файлу

Предположим что в нашей записной книжке накопилось 100 записей, а мы хотим считать 50-ю. Конечно, можно организовать цикл и прочитать все записи с первой по заданную. Очевидно, что более целенаправленное решение — установить указатель позиционирования файла pos прямо на запись 50 и считать ее:

Подобные операции поиска эффективны, если файл состоит из записей известного и постоянного размера. Чтобы заменить содержимое произвольной записи, надо открыть поток вывода в режиме модификации:

Если не указать флаг ios::ate (или ios::app ), то при открытии бинарного файла Notebook.dat его предыдущее содержимое будет стерто!

Наконец, можно открыть файл одновременно для чтения/записи, используя методы, унаследованные поточным классом fstream от своих предшественников. Поскольку класс fstream произведен от istream и ostream (родителей ifstream и ofstream соответственно), все упомянутые ранее методы становятся доступными в приложении.

В следующем примере показана перестановка первой и третьей записей файла Notebook.dat .

В конструкторе объекта file надо указать флаги ios::in и ios::out , разрешая одновременное выполнение операций чтения и записи. В результате выполнения этого кода первая и третья записи бинарного файла Notebook.dat поменяются местами.

Дополнительные примеры по теме есть в этой заметке.

05.11.2015, 09:45; рейтинг: 102988

Работа с файлами

Загрузить данные в программу из файла, выгрузить данные в файл, записывать историю обращений к программе в специальный файл — всё это очень частые задачи.

Как открыть файл

Чтобы открыть файл, используется функция open() :

  • Функция open() принимает на вход 2 аргумента: путь до файла и права, с которыми его открыть. r — от read , т.е. мы просим открыть файл с правами на чтение.
  • Функция open() возвращает не текст в файле, а сам файл. Файл как бы теперь открыт, как если вы бы щёлкнули по нему дважды левой клавишей.
  • Метод файла .read() позволяет читать данные из файла. Строка с содержимым файла запишется в переменную file_contents .
  • Метод .close закрывает файл.

Как закрыть файл

Закрывать файлы важно по двум причинам:

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

Однажды вы точно забудете закрыть файл. В Python есть специальная команда на такой случай — with :

Выглядит немного непривычно, но суть простая: всё, что лежит «внутри» блока with (т.е. с отступом от него) — делается с открытым файлом. Как только файл не нужен, вы убираете отступ и файл сам закроется.

Ошибки кодировки

Бывает, что вы знаете, что файл в порядке, но Python читает его со странными символами: ������. Дело в кодировках: одни программы пользуются CP1251, другие ASCII, третьи UTF-8. К сожалению, программистам до сих пор не получилось окончательно перейти к какому-то одному варианту.

Илон Маск рекомендует:  soundex - Возвращает ключ soundex для строки

Чтобы открыть файл с нужной кодировкой, нужно передать функции open именованный аргумент encoding :

Если вы не знаете кодировку вашего файла, на Хабре есть интересная статья с такой схемой:

Запись в файл

Для записи в файл нужно лишь указать права w (write) и использовать не .read() , а .write() :

Альтернативные статьи

Получи опыт серьезной веб-разработки

Python, Git, API вКонтакте и Facebook, Django, Linux и не только. Выбери с какого модуля начать.

Функции работы с файлами и операции ввода-вывода (C++/CLI) File Handling and I/O (C++/CLI)

Демонстрирует различные операции с файлами с помощью .NET Framework. Demonstrates various file operations using the .NET Framework.

В следующих разделах описывается использование классов, определенных в System.IO пространство имен для выполнения различных операций с файлами. The following topics demonstrate the use of classes defined in the System.IO namespace to perform various file operations.

Перечисление файлов в каталоге Enumerate Files in a Directory

В следующем примере кода показано, как получить список файлов в каталоге. The following code example demonstrates how to retrieve a list of the files in a directory. Кроме того подкаталоги пронумеровываются. Additionally, the subdirectories are enumerated. В следующем примере кода используется GetFiles GetFiles и GetDirectories методов, чтобы отобразить содержимое каталога C:\Windows. The following code example uses the GetFilesGetFiles and GetDirectories methods to display the contents of the C:\Windows directory.

Пример Example

Монитор изменений в файловой системе Monitor File System Changes

В следующем примере кода используется FileSystemWatcher для регистрации событий, соответствующие файлы, созданные, измененные, удаленные или переименован. The following code example uses FileSystemWatcher to register for events corresponding to files being created, changed, deleted, or renamed. Вместо периодического опроса поиск изменений в файлах в каталоге, вы можете использовать FileSystemWatcher класс, который создает события при обнаружении изменения. Instead of periodically polling a directory for changes to files, you can use the FileSystemWatcher class to fire events when a change is detected.

Пример Example

Прочитать двоичный файл Read a Binary File

В следующем примере кода демонстрируется чтение двоичных данных из файла, используя два класса из System.IO пространство имен: FileStream и BinaryReader. The following code example shows how to read binary data from a file, by using two classes from the System.IO namespace: FileStream and BinaryReader. FileStream представляет фактический файл. FileStream represents the actual file. BinaryReader предоставляет интерфейс для потока, который разрешает двоичный доступ. BinaryReader provides an interface to the stream that allows binary access.

В примере кода считывает файл с именем data.bin и содержит целые числа в двоичном формате. The code example reads a file that’s named data.bin and contains integers in binary format. Сведения об этом файле см. в разделе как: Запись в двоичный файл (C++выполняет). For information about this kind of file, see How to: Write a Binary File (C++/CLI).

Пример Example

Чтение из текстового файла Read a Text File

В следующем примере кода показано, как открыть и прочитать текст файла по одной строке за раз, с помощью StreamReader класс, который определен в System.IO пространства имен. The following code example demonstrates how to open and read a text file one line at a time, by using the StreamReader class that’s defined in the System.IO namespace. Экземпляр этого класса используется для открытия текстового файла и затем StreamReader.ReadLine метод используется для считывания каждой строки. An instance of this class is used to open a text file and then the StreamReader.ReadLine method is used to retrieve each line.

Данный пример кода считывает файл с именем textfile.txt и содержит текст. This code example reads a file that’s named textfile.txt and contains text. Сведения об этом файле см. в разделе как: Запись в текстовый файл (C++выполняет). For information about this kind of file, see How to: Write a Text File (C++/CLI).

Пример Example

Получение сведений о файле Retrieve File Information

В следующем примере кода показано FileInfo класса. The following code example demonstrates the FileInfo class. Если имя файла, этот класс можно использовать для получения сведений о файле, такие как размер файла, каталога, полное имя и Дата и время создания и последнего изменения. When you have the name of a file, you can use this class to retrieve information about the file such as the file size, directory, full name, and date and time of creation and of the last modification.

Этот код извлекает информацию о файлах для Notepad.exe. This code retrieves file information for Notepad.exe.

Пример Example

Запись в двоичный файл Write a Binary File

В следующем примере кода демонстрируется запись двоичных данных в файл. The following code example demonstrates writing binary data to a file. Два класса из System.IO используются пространства имен: FileStream и BinaryWriter. Two classes from the System.IO namespace are used: FileStream and BinaryWriter. FileStream представляет фактический файл, хотя BinaryWriter предоставляет интерфейс для потока, который разрешает двоичный доступ. FileStream represents the actual file, while BinaryWriter provides an interface to the stream that allows binary access.

В следующем примере кода записывает файл, содержащий целые числа в двоичном формате. The following code example writes a file containing integers in binary format. Этот файл может быть считан с код в как: Прочитать двоичный файл (C++выполняет). This file can be read with the code in How to: Read a Binary File (C++/CLI).

Пример Example

Запись в текстовый файл Write a Text File

В следующем примере кода показано, как для создания текстового файла и запись в него с помощью текста StreamWriter класс, который определен в System.IO пространства имен. The following code example demonstrates how to create a text file and write text to it using the StreamWriter class, which is defined in the System.IO namespace. StreamWriter Конструктор принимает имя создаваемого файла. The StreamWriter constructor takes the name of the file to be created. Если файл существует, он перезаписывается (Если передается значение false как второй StringWriter аргумент конструктора). If the file exists, it is overwritten (unless you pass True as the second StringWriter constructor argument).

Файл реализуется с помощью Write и WriteLine функции. The file is then filed using the Write and WriteLine functions.

C++. Работа с текстовыми файлами

Файлы позволяют пользователю считывать большие объемы данных непосредственно с диска, не вводя их с клавиатуры. Существуют два основных типа файлов: текстовые и двоичные.

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

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

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

В программах на C++ при работе с текстовыми файлами необходимо подключать библиотеки iostream и fstream.

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

  1. описать переменную типа ofstream.
  2. открыть файл с помощью функции open.
  3. вывести информацию в файл.
  4. обязательно закрыть файл.

Для считывания данных из текстового файла, необходимо:

  1. описать переменную типа ifstream.
  2. открыть файл с помощью функции open.
  3. считать информацию из файла, при считывании каждой порции данных необходимо проверять, достигнут ли конец файла.
  4. закрыть файл.

Запись информации в текстовый файл

Как было сказано ранее, для того чтобы начать работать с текстовым файлом, необходимо описать переменную типа ofstream. Например, так:

ofstream F;

Будет создана переменная F для записи информации в файл. На следующим этапе файл необходимо открыть для записи. В общем случае оператор открытия потока будет иметь вид:

F.open(«file», mode);

Здесь F — переменная, описанная как ofstream, file — полное имя файла на диске, mode — режим работы с открываемым файлом. Обратите внимание на то, что при указании полного имени файла нужно ставить двойной слеш. Для обращения, например к файлу accounts.txt, находящемуся в папке sites на диске D, в программе необходимо указать: D:\\sites\\accounts.txt.

Файл может быть открыт в одном из следующих режимов:

  • ios::in — открыть файл в режиме чтения данных; режим является режимом по умолчанию для потоков ifstream;
  • ios::out — открыть файл в режиме записи данных (при этом информация о существующем файле уничтожается); режим является режимом по умолчанию для потоков ofstream;
  • ios::app — открыть файл в режиме записи данных в конец файла;
  • ios::ate — передвинуться в конец уже открытого файла;
  • ios::trunc — очистить файл, это же происходит в режиме ios::out;
  • ios::nocreate — не выполнять операцию открытия файла, если он не существует;
  • ios::noreplace — не открывать существующий файл.

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

После удачного открытия файла (в любом режиме) в переменной F будет храниться true, в противном случае false. Это позволит проверить корректность операции открытия файла.

Открыть файл (в качестве примера возьмем файл D:\\sites\\accounts.txt) в режиме записи можно одним из следующих способов:

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

Если вы хотите открыть существующий файл в режиме дозаписи, то в качестве режима следует использовать значение ios::app.

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

Например, для записи в поток F переменной a, оператор вывода будет иметь вид:

F #include «stdafx.h»
#include
#include
#include
using namespace std ;
int main ( )
<
setlocale ( LC_ALL, «RUS» ) ;
int i, n ;
double a ;
//описывает поток для записи данных в файл
ofstream f ;
//открываем файл в режиме записи,
//режим ios::out устанавливается по умолчанию
f. open ( «D: \\ sites \\ accounts.txt» , ios :: out ) ;
//вводим количество вещественных чисел
cout «n=» ; cin >> n ;
//цикл для ввода вещественных чисел
//и записи их в файл
for ( i = 0 ; i n ; i ++ )
<
cout «a=» ;
//ввод числа
cin >> a ;
f a « \t « ;
>
//закрытие потока
f. close ( ) ;
system ( «pause» ) ;
return 0 ;
>

Чтение информации из текстового файла

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

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

Например, для чтения данных из потока F в переменную a, оператор ввода будет выглядеть так:

F>>a;

Два числа в текстовом редакторе считаются разделенными, если между ними есть хотя бы один из символов: пробел, табуляция, символ конца строки. Хорошо, когда программисту заранее известно, сколько и какие значения хранятся в текстовом файле. Однако часто известен лишь тип значений, хранящихся в файле, при этом их количество может быть различным. Для решения данной проблемы необходимо считывать значения из файла поочередно, а перед каждым считыванием проверять, достигнут ли конец файла. А поможет сделать это функция F.eof(). Здесь F — имя потока функция возвращает логическое значение: true или false, в зависимости от того достигнут ли конец файла.

Илон Маск рекомендует:  Подробное описание модели визуального форматирования

Следовательно, цикл для чтения содержимого всего файла можно записать так:

Для лучшего усвоения материала рассмотрим задачу.

Задача 2

В текстовом файле D:\\game\\accounts.txt хранятся вещественные числа, вывести их на экран и вычислить их количество.

Решение

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

Работа с файлами

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

Создание и открытие

Чтобы получить возможность работать с файлом в Python 3, для начала его необходимо создать. Сделать это можно стандартными средствами операционной системы, перейдя в нужный каталог и создав новый документ с форматом txt. Однако аналогичное действие выполняется и с помощью метода open в языке программирования Python, которому надо передать в качестве параметров название файла и режим его обработки.

Следующий код демонстрирует получение переменной file ссылки на новый документ. Если запустить эту программу, она создаст текстовый файл test.txt в папке, где хранится исходный код.

Если же файл с указанным именем test.txt уже существует в каталоге с кодом, программа просто продолжит работу с ним, не создавая новый документ. Как можно заметить, имя файла является первым параметром метода open. Сразу за ним следует специальная буква, которая обозначает метод обработки данных. В данном случае “w” означает write, то есть запись. Подробнее обо всех доступных режимах работы будет немного дальше, а сейчас важно усвоить, что после выполнения любых манипуляций над файлом, его обязательно следует закрыть с помощью функции close, чтобы гарантированно избежать потери информации.

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

Режим открытия

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

Символ
Значение
“r” открытие для чтения (по умолчанию)
“w” открытие для записи, а если его не существует по заданному пути, то создается новый
“x” открытие для записи, но только если его еще не существует, иначе будет выдано исключение
“a” открытие на дополнительную запись, чтобы информация добавлялась в конец документа
“b” открытие в двоичном режиме
“t” открытие в текстовом режиме (по умолчанию)
“+” открытие одновременно на чтение и запись

Пользуясь вторым аргументом метода open, можно комбинировать различные режимы работы с файлами, указывая, к примеру, “rb” для чтения записанных данных в двоичном режиме.

Еще один пример: отличие “r+” и “w+” заключается в том, что во втором случае создастся новый файл, если такого нет. В первом же случае возникнет исключение. При использовании “r+” и “w+” файл будет открыт и на чтение и на запись. Пример обработки исключения разберем, когда будем рассматривать чтение файла.

Методы

Объект, который возвращает функция open, содержит ссылку на существующий файл. Также в нем имеется информация о созданном документе, представленная в виде четырех основных полей. Все они описаны в следующей таблице, которая содержит их имена и значение.

Свойство
Значение
name возвращает имя файла
mode возвращает режим, в котором был открыт
closed возвращает true, если файл закрыт и true, если открыт
softspace возвращает true, если при выводе данных из файла не следует отдельно добавлять символ пробела

Чтобы вывести на экран свойства файла, достаточно воспользоваться оператором доступа, то есть точкой, после чего передать это в качестве параметра уже знакомой функции print.

Запись

В Python 3 запись в файл осуществляется с помощью метода write. Метод вызываем у объекта, который ссылается на существующий файл. Важно помнить, что для этого следует предварительно открыть документ с помощью функции open и указать режим записи символом “w”. Метод write принимает в качестве аргумента данные, которые нужно поместить в текстовый файл. Следующий пример кода показывает запись строки “hello”.

Если необходимо добавить новую информацию к записанным ранее данным, следует заново вызвать функцию open, указав ей в качестве режима работы символ “a”. В противном случае все сведения из файла test.txt будут полностью удалены. В приведенном ниже примере кода текстовый документ открывается для дополнительной записи, после чего в него помещается строковый литерал “ world” с пробелом вначале. Таким образом в test.txt будет располагаться “hello world”. После всего этого не нужно забывать об обязательном закрытии файла.

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

Запись бинарных данных

При записи бинарных данных, следует использовать режим “wb”. Вот пример записи строки в кодировке utf8:

Чтение

Для чтения информации из файла в Python 3, следует вызывать метод read через объект, который ссылается на существующий документ. Также необходимо не забывать указывать “r” в качестве второго параметра функции open при открытии текстового файла.

В следующем примере read возвращает информацию из test.txt в метод print, который затем выводит сведения на экран. Как и прежде, программа завершается закрытием документа при помощи метода close. Метод read также может принимать целочисленный параметр, который используется для передачи количества символов для чтения. К примеру, введя 5, программа прочитает только hello.

Есть еще один момент: нельзя делать закрытие в секции finally блока try. Если произойдет исключение при открытии файла, то в секции finally будет ошибка.

Чтение бинарных данных

В случае, если данные бинарного вида — следует использовать “rb” в функции open. Рассмотрим пример:

Здесь побайтно читается файл. Каждый байт приводит к строковому виду в шестнадцатеричном представлении. С помощью функции print выводится результирующая строка.

with as

Чтобы немного автоматизировать обработку текстовых файлов, рекомендуется использовать связку операторов with as. Благодаря им пропадает необходимость в вызове метода close для документа, который необходимо закрыть, поскольку это происходит автоматически. Все это демонстрируется в следующем фрагменте кода, где происходит считывание данных из test.txt. Как обычно, метод print используется для вывода строковой информации на экран.

Более того, в этом случае не нужно обрабатывать исключение. Если файла с указанным именем нету, то строки с вложенным кодом в операторе with выполняться не будут.

С помощью рассмотренных возможностей языка программирования Python, пользователь в состоянии достаточно легко выполнять основные операции по работе с чтением и записью информации в файлы.

Работа с файлами в C++

педагогические науки

  • Хусаинов Исмагильян Гарифьянович , доктор наук, доцент, профессор
  • Башкирский государственный университет, Стерлитамакский филиал
  • Похожие материалы

    Язык программирования С++ обеспечивает несколько способов работы с файлами. Рассмотрим способ потока. Поток является некоторым абстрактным понятием, который относится к любому переносу данных (последовательность байтов) от источника к приемнику. Операция записи информации в поток называется включением информации, а чтение информации из потока извлечением. Эти операции выполняются через буфер. Потоки бывают входные (информация заносится в память), выходные (информация считывается из памяти), а также двунаправленные (допускается как чтение информации, так и запись) [1-5].

    Для работы с файловыми потоками применяются классы istream и ostream. Эти классы базовые для класса iostream, который реализует двунаправленный поток. Чтобы применить в программе этих классов нужно подключить соответствующие заголовочные файлы.

    Преимущества работы с файлами используя поток по сравнению с функциями ввода-вывода — контроль типов и работа с типами пользователя. Недостаток работы с использованием потока — это уменьшение быстродействия программы.

    Данные в файл могут быть переданы в двоичном или текстовом представлении. Отсюда потоки делятся на двоичные и текстовые. Последовательность символов — это текстовый поток, а последовательность байтов представляет двоичный поток.

    Работа с файлами заключается в выполнении следующих операций:

    1. открытие файла (для записи информации, добавления или чтения);
    2. запись информации в файл или считывание её с файла;
    3. закрытие файла.

    При закрытии файл отсоединяется от потока.

    Чтобы связать поток с файлом, нужно использовать управляющую структуру (указатель файла), которая имеет тип FILE. Эта структура содержит всю информацию о файле.

    Используя FILE, переменная типа указатель файла объявляется следующим образом:

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

    Здесь *file_name — это имя файла, перед именем можно указать путь к файлу. Параметр *file_mode определяет режим открытия файла.

    Если при выполнении операции открытия файла вышла ошибка, то fopen() вернет NULL, т.е. пустой указатель.

    Файл закрывается с помощью функции fclose():

    Здесь myfile указатель файла.

    Cимвола с файла можно считать используя функцию fgetc():

    fgetc() возвращает целочисленное значение. Символ находится в младшем разряде. В том случае, если чтение произошло без ошибок, то старший разряд равен нулю. При чтении признака конца файла функция fgetc() вернет значение EOF.

    Символ в файл записывается с помощью функции fputc():

    Здесь сh — записываемый символ. В файл записывается только младший разряд сh.

    Для определения достигнут ли конец файла, необходимо использовать функцию feof():

    При чтении признака конца файла feof() вернет true, а иначе — false.

    Задача

    Составить программу, которая копирует все символы из одного файла в другой кроме цифр.

    Решение

    Данные из файла можно считывать и записывать строками. Для этого используются функции fgets() и fputs():

    Здесь параметр n — это длина строки, *mys — указатель на строку.

    Задача

    Составить программу, которая считывает с клавиатуры строки и записывает их в файл. Выход из программы при вводе пустой строки.

    Решение

    Задача

    Составить программу, которая считывает информацию с файла и выводит на экран.

    Решение

    Для чтения и записи данных любых типов используются функции: fread() и fwrite():

    Пример использования функций fread() и fwrite():

    Язык программирования С++ обеспечивает несколько способов работы с файлами. Рассмотрим способ потока. Поток является некоторым абстрактным понятием, который относится к любому переносу данных (последовательность байтов) от источника к приемнику. Операция записи информации в поток называется включением информации, а чтение информации из потока извлечением. Эти операции выполняются через буфер. Потоки бывают входные (информация заносится в память), выходные (информация считывается из памяти), а также двунаправленные (допускается как чтение информации, так и запись) [1-5].

    Для работы с файловыми потоками применяются классы istream и ostream. Эти классы базовые для класса iostream, который реализует двунаправленный поток. Чтобы применить в программе этих классов нужно подключить соответствующие заголовочные файлы.

    Преимущества работы с файлами используя поток по сравнению с функциями ввода-вывода — контроль типов и работа с типами пользователя. Недостаток работы с использованием потока — это уменьшение быстродействия программы.

    Данные в файл могут быть переданы в двоичном или текстовом представлении. Отсюда потоки делятся на двоичные и текстовые. Последовательность символов — это текстовый поток, а последовательность байтов представляет двоичный поток.

    Работа с файлами заключается в выполнении следующих операций:

    1. открытие файла (для записи информации, добавления или чтения);
    2. запись информации в файл или считывание её с файла;
    3. закрытие файла.

    При закрытии файл отсоединяется от потока.

    Чтобы связать поток с файлом, нужно использовать управляющую структуру (указатель файла), которая имеет тип FILE. Эта структура содержит всю информацию о файле.

    Используя FILE, переменная типа указатель файла объявляется следующим образом:

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

    Здесь *file_name — это имя файла, перед именем можно указать путь к файлу. Параметр *file_mode определяет режим открытия файла.

    Если при выполнении операции открытия файла вышла ошибка, то fopen() вернет NULL, т.е. пустой указатель.

    Файл закрывается с помощью функции fclose():

    Здесь myfile указатель файла.

    Cимвола с файла можно считать используя функцию fgetc():

    fgetc() возвращает целочисленное значение. Символ находится в младшем разряде. В том случае, если чтение произошло без ошибок, то старший разряд равен нулю. При чтении признака конца файла функция fgetc() вернет значение EOF.

    Символ в файл записывается с помощью функции fputc():

    Здесь сh — записываемый символ. В файл записывается только младший разряд сh.

    Для определения достигнут ли конец файла, необходимо использовать функцию feof():

    При чтении признака конца файла feof() вернет true, а иначе — false.

    Задача

    Составить программу, которая копирует все символы из одного файла в другой кроме цифр.

    Решение

    Данные из файла можно считывать и записывать строками. Для этого используются функции fgets() и fputs():

    Здесь параметр n — это длина строки, *mys — указатель на строку.

    Задача

    Составить программу, которая считывает с клавиатуры строки и записывает их в файл. Выход из программы при вводе пустой строки.

    Решение

    Задача

    Составить программу, которая считывает информацию с файла и выводит на экран.

    Решение

    Для чтения и записи данных любых типов используются функции: fread() и fwrite():

    Пример использования функций fread() и fwrite():

    Для чтения и записи данных при прямом доступе используется функция fseek(), которая устанавливает указатель файла в нужную позицию:

    Здесь offset — количество байтов, на которое нужно перенести указатель файла, начиная от позиции whence. Параметр whence может принимать значения SEEK_SET (начало файла), SEEK_CUR (текущая позиция файла), SEEK_END (конец файла).

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

    Здесь spisok — тип элементов.

    Для определения значения указателя текущей позиции в файле нужно использовать функцию ftell():

    Вывод

    В работе рассмотрены способы работы с файлами на языке программирования С++. В качестве примера приведены решения некоторых задач. Приведенные программы могут быть использованы при решении задач по файлам.

    Список литературы

    1. Вирт Н. Алгоритмы и структуры данных. – М.: Мир, 1989. – 406 с.
    2. Дубров Г.В. Основы программирования на С++. – М.: Конкорд, 1993. – 219 c.
    3. Подбельский В.В. Язык С++: Учебное пособие – 5 изд. – М: Финансы и статистика, 2004. – 560 c.
    4. Хусаинов, И.Г. Решение задач на ЭВМ. Структурное программирование / Стерлитамак: Стерлитамакский филиал БашГУ, 2014. 110 с.
    5. Шилдт Г. С++: базовый курс. 3-е издание. – М.: Издательский дом «Вильямс». 2010. – 624 с.

    Электронное периодическое издание зарегистрировано в Федеральной службе по надзору в сфере связи, информационных технологий и массовых коммуникаций (Роскомнадзор), свидетельство о регистрации СМИ — ЭЛ № ФС77-41429 от 23.07.2010 г.

    Соучредители СМИ: Долганов А.А., Майоров Е.В.

    Работа с файлами в C#

    Всем доброго времени суток. На связи Алексей Гулынин. В прошлой статье вы узнали немного о том, что такое модульное тестирование в Visual Studio. В данной статье я бы хотел рассказать о работе с файлами на C#. Всю работу с файлами можно разделить на 2 группы: 1) это работа с файлами, как с элементами файловой системы, например, найти файл, получить список файлов в директории, узнать дату изменения файла, различные его атрибуты, расширение, скопировать или удалить файл, создать новый. 2) это работа с содержимым файла: прочитать файл или записать в него что-нибудь.

    Для выполнения всех этих операций существует несколько классов, расположенных в пространстве имён «System.IO».

    Существует 2 класса File и FileInfo, которые предназначены для работы с файлом, как с частью файловой системы. Здесь также есть несколько методов, которые позволяют работать с содержимым файла целиком. В простых случаях (когда размеры файла небольшие, скажем до 1МБ) файл можно полностью прочитать и сохранить в память.

    Некоторые методы по работе с файлами:
    • ReadAllText() . Самая простая операция — это прочитать файл целиком. Данный метод является статическим. Здесь в качестве параметра можно указать полный путь к файлу. Когда указываем путь к файлу, не забываем экранировать символ «\».
    • ReadAllLines() . Этот статический метод возвращает массив строк, т.е. читает файл построчно.
    • WriteAllText() . Здесь в качестве параметра передаём строку, и эта строка целиком добавляется в файл с перезаписью содержимого файла.
    • AppendAllText() . Здесь содержимое добавляется поверх существующего файла, без его перезаписи.

    Ниже приведен пример на эти методы. Для начала подготовим тестовый файл, который заполним названиями городов (Москва, Питер, Казань, Уфа, Стерлитамак). Имя каждого города находится на новой строке. Файл назовем «cities.txt» и расположим его в корне какого-нибудь диска (в моём случае — это диск «E»):

    То, что можно сделать с помощью класса «File», можно сделать и с помощью класса «FileInfo», и наоборот. Почему же их два? Методы класса «File» — статические, а методы класса «FileInfo» являются методами объекта. При работе с методами класса «File» первым параметром всегда указывается путь до файла. В случае «FileInfo» — это имя указывается один раз в конструкторе при создании объекта. Если нужно выполнить разовую операцию, то лучше использовать класс «File». В случае работы со многими файлами лучше использовать «FileInfo».

    Реализуем следующий алгоритм: необходимо вывести все файлы, даты изменения которых старше введенной пользователем даты. Будем рассматривать папку «C:\Windows\System32». В ней много файлов. Тут нам потребуется получить все файлы этой директории. Забегая вперед скажу, что это можно сделать с помощью метода «GetFiles()» класса «DirectoryInfo».

    Протестируйте работу данного скрипта.

    Напишем ещё несколько примеров на работу с файлами:

    • Copy — копирование файла.
    • Delete — удаление файла.
    • Exists — проверка существования файла.

    В качестве домашнего задания: переделайте последний пример только с использованием класса «FileInfo».

    В данной статье вы узнали, как работать с файлами в C#.

    На связи был Алексей Гулынин, оставляйте свои комментарии, увидимся в следующих статьях.

    SBP-Program

    Работа с файлами в Си

    Текстовые файлы

    Рассмотрим работу с текстовым файлом в Си на примере. Создайте на диске С текстовый файл с именем TextFile.txt. Наберите в этом файле такие строки:

    А это код программы на C, которая открывает наш файл и считывает из него строки:

    Чтоб открыть текстовый файл в C используем функцию fopen:

    первый аргумент функции fopen указывает на файл, а второй говорит, что файл открыт для чтения из него.

    Строки считываем с помощью функции fgets:

    первый аргумент функции fgets указвает на массив символов, в котором будут сохранятся полученные строки, второй аргумент — это максимальное количество символов для считывания, третий — наш файл.

    После завершения работы с файлом, его надо закрыть:

    Русские буквы в строках тоже проходят.

    Кстати, эту программу я сделал в Eclipse. Как работать с C/C++ в Eclipse можно посмотреть здесь.

    Итак, мы открыли и считали данные из текстового файла.

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

    Создаем текстовый файл для записи в него данных:

    если файл уже имеется, то он будет открыт, и все данные из него будут удалены.

    C-строка cString, и число nVal записываются программой в текстовый файл. cNewLine — это просто переход на новую строку.

    Записываем данные в текстовый файл с помощью функции fprintf:

    первый аргумент здесь — наш файл, второй — форматная строка, третий и более — нужное для этого формата количество аргументов.

    Если нужно открыть файл для записи в конец данных существующего файла (т.е. дописать файл), то тип доступа к файлу обозначим «a»:

    Добавим к «а» плюс, в этом случае, если файл не существует, то он будет создан:

    Открыть существующий файл для записи и чтения можно так:

    Открыть существующий (содержимое его стирается) или создать новый файл для чтения и записи:

    Работа с файлами

    Я так уж и быть упущу некоторые технические подробности, которые можно было бы описать всего двумя словами: В Unix- системах для отделения одной строки от другой используется \n , a в Windows \r\n , а в MacOS \n\r. И для того, чтобы языки программирования были легче переносимы с одной операционной системы на другую, эта комбинация преобразуется автоматически при чтении текстовых файлов.

    Открытие файла

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

    Итак, мы открываем файл $filename в режиме $mode. Лично я очень редко использую третий параметр $use_other_path, он означает, что если не указан относительный путь к файлу, его нужно искать среди путей используемых конструкциями include и require.

    Пред вами список значений, которые может принимать параметр $mode:

    • r — Файл открывается только для чтения. Если файла не существовало, будет ошибка. После удачного открытия файла указатель устанавливается в начало файла.
    • r+ — файл открывается одновременно и на чтение и на запись. Указатель устанавливается на начало. Если файла не существовало, возвращается false. Ахтунг, если в момент записи указатель установлен где-то посередине файла, то данные запишутся поверх уже существующих.
    • w- Создаётся новый пустой файл. Если на момент вызова уже существовал такой файл, то он уничтожается.
    • w+ — аналогичен r+, но если файла не существовало он создается. Можно работать как в режиме записи так в режиме чтения. Если файл существовал, то его содержимое уничтожается.
    • а- открывает существующий фал в режиме записи и при этом двигает указатель на последний байт файла. Этот режим используют, когда нужно что-то дописать. Вызов проваливается если файла не существовало.
    • а+ — открывает файл в режиме чтения и записи. Указатель устанавливается в конец файла при этом, не уничтожая содержимое файла. Отличается от а тем, что ели до вызова файла не существовало, то он создается.

    В конце любой из строк r,w,a,r+,w+,a+ может находиться ещё один символ- «b» или «t». Если указан «b», то файл открывается в режиме бинарного чтения/записи. Если «t», устанавливается режим трансляции символа перевода строки. О режиме «t» нет ни слова в документации, но поверим Дмитрию Котерову, который утверждает, что этот режим работает во всех системах.

    Всё это можно продемонстрировать на примере:

    Илон Маск рекомендует:  Fopen открыть файл
Понравилась статья? Поделиться с друзьями:
Кодинг, CSS и SQL