Эффективность различных способов работы с файлами в языках С/С++ | Статья в журнале «Техника. Технологии. Инженерия»

Отправьте статью сегодня! Журнал выйдет 30 ноября, печатный экземпляр отправим 4 декабря.

Опубликовать статью в журнале

Библиографическое описание:

Эффективность различных способов работы с файлами в языках С/С++ / Е. В. Коптенок, В. С. Лядов, М. Ю. Пескова [и др.]. — Текст : непосредственный // Техника. Технологии. Инженерия. — 2020. — № 1 (15). — С. 5-9. — URL: https://moluch.ru/th/8/archive/152/4839/ (дата обращения: 16.11.2024).



Главный объект, с которым работает любой компьютер — информация. Как и человек, компьютер обрабатывает разного рода информацию: текст, графику, звук, видео и т. д. Одним из способов хранения и обработки информации на компьютере является использование файлов. Файл представляет собой последовательный набор данных, хранящийся на каком-либо физическом устройстве и имеющий имя и расширение. Работа с файлами реализуется средствами самой операционной системой. Операционная система предоставляет приложениям набор некоторых функций, благодаря которым организуется работа с файлами. На файловую систему накладываются определённые ограничения самой операционной системой. С точки зрения API, файл представляется как объект, по отношению к которому применяются функции API. На уровне API не важно, существует ли файл, как объект файловой системы или как устройство ввода-вывода. Расширение файла предназначено для однозначного определения типа файлового объекта.

Наиболее распространенные расширения:

– Текстовый документ: txt;

– Форматированный текстовый документ: rtx, rtf, pdf, doc, docm;

– Электронные таблицы: xls, xlsx, xlsm, ods;

– Графика: jpg, jpeg, gif, png;

– Видео: mpeg 263, avi;

– Архив: rar, zip, tg;

– Исполняемые файлы: exe, cmd, bat;

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

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

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

– Бинарных файлов;

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

Преимущества:

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

– Формат текстового файла простой, и он свободно может быть изменён обычным редактором текста, который в свою очередь есть в любом ОС.

Недостатки:

– У текстовых файлов, имеющих большой объём, низкая информационная энтропия — эти файлы занимают больше места, нежели чем минимально необходимо.

– Некоторые операции производимыми над текстовыми файлами малоэффективны. К примеру, если в файле встретится число, вычислительная система до начала операций с ним должна будет перевести его в собственный внутренний формат, применив сравнительно сложную процедуру преобразования числа; чтобы перейти на 1000-ю строку, требуется пройти 999 строк, идущих до нее.

Двоичный (бинарный) файл — в широком смысле представляет собой набор последовательных произвольных байтов.

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

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

– Функции заголовочного файла стандартной библиотеки языка C, для файлового ввода и вывода.

– Потоковые классы языка C++: ifstream и ofstream.

В качестве способов хранения выступали текстовые и бинарные файлы.

Для проверки эффективности каждого способа обработки были получены значения времени, за которое происходит считывание и сохранение данных в файл. В качестве данных выступал массив структур, размерностью 1000 элементов, хранящий запись вида: “Строка, целое число, вещественное число”. Эксперименты, обсуждаемые в данной статье, проходили на ноутбуке (модель Intel Core i5 CPU P8300, 2.4*4 Ghz), работающий на Windows 10. Размер оперативной памяти 8 Гб. Для каждого способа эксперимент повторялся 20 раз, и учитывался средний показатель.

Таблица 1

Значение времени, за которое произошло считывание данных из файлов. ms— миллисекунды

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

Бинарный файл

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

3 ms

1 ms

Потоковые классы: ifstream, ofstream

8 ms

7 ms

Таблица 2

Значение времени, за которое произошла запись данных вфайлов. ms— миллисекунды

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

Бинарный файл

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

3 ms

1 ms

Потоковые классы: ifstream, ofstream

13 ms

12 ms

Рис. 1. Время, затраченное на считывание данных из файла

Рис. 2. Время, затраченное на запись данных в файл

Вывод:

Наиболее оптимальной по времени оказалась работа стандартной библиотеки языка С. Исследование показывает, что наилучшую скорость работы обеспечивают средства стандартной библиотеки языка С, описанные в заголовочном файле stdio.h при взаимодействии с бинарными файлами. Наихудший результат показывает работа с текстовыми файлами, средствами потоковых классов, описываемые в стандартной библиотеке C++: ifstream и ofstream.

Литература:

  1. Страуструп, Б. Язык программирования C++ / Б. Страуструп. — М.: Радио и связь, 2011. — 350 c.
  2. Керниган, Б. Язык программирования C. / Б. Керниган, Д. М. Ритчи. — М.: Вильямс, 2016. — 288 c.
Основные термины (генерируются автоматически): файл, API, значение времени, стандартная библиотека языка С, текстовый файл, бинарный файл, заголовочный файл, операционная система, самая операционная система, файловая система.

Похожие статьи

Методика применения манипуляторов в потоках вывода в языке С++

Сравнительный анализ современных интегрированных средств разработки для языков С/C++

Сравнительный анализ мультимедийных библиотек для написания игрового проекта на языках программирования С/С++

Функция автодополнения в поисковых системах как инструмент для филологического исследования на примере запросов на английском и русском языках

Особенности реализации MVC-архитектуры в веб-приложениях

Визуализация машины Тьюринга средствами СИ/С++

Использование современных языков программирования для решения профессиональных задач на примере языка программирования Python

Сравнительный анализ интегрированных сред разработки для языка Java

Гибкие нейро-нечеткие системы вывода и программная реализация для решения задач аппроксимации

Использование интерактивного подхода в обучении информатике с применением презентаций на основе макросов

Похожие статьи

Методика применения манипуляторов в потоках вывода в языке С++

Сравнительный анализ современных интегрированных средств разработки для языков С/C++

Сравнительный анализ мультимедийных библиотек для написания игрового проекта на языках программирования С/С++

Функция автодополнения в поисковых системах как инструмент для филологического исследования на примере запросов на английском и русском языках

Особенности реализации MVC-архитектуры в веб-приложениях

Визуализация машины Тьюринга средствами СИ/С++

Использование современных языков программирования для решения профессиональных задач на примере языка программирования Python

Сравнительный анализ интегрированных сред разработки для языка Java

Гибкие нейро-нечеткие системы вывода и программная реализация для решения задач аппроксимации

Использование интерактивного подхода в обучении информатике с применением презентаций на основе макросов

Задать вопрос