Запис і читання типів даних користувача в двійкові файли

Опис та внутрішнє представлення файлів

Файли відрізняються один від одного. Усі файли, які у комп'ютері, мають спеціальні атрибути, тобто. спеціальні способи опису, що дозволяють відрізнити один файл від іншого: 1) ім'я; 2 розмір; 3) дата та час; 4) значок.

Кожен файл має ім'я - ім'я файлу. Ім'я файлу описує його вміст або нагадує, для чого він може використовуватися. Ім'я надається файлу при його створенні. Це стосується всіх файлів.

Кожен файл має фізичний розмір. Файл займає певний об'єм пам'яті комп'ютера та певний об'єм дискового простору.

У момент створення файлу операційна система на нього ставить друк із зазначенням дати та часу створення. Це дозволяє сортувати файли за датою та часом і таким чином наводити лад у комп'ютері. Також відзначається дата та час оновлення або зміни файлу.

Кожен файл відноситься до певного типу, що тісно пов'язаний із значком файлу, який ми бачимо. Тип файлу залежить від його вмісту. Кожна програма надає створеному документу певний тип та відповідний значок.

Розмір файлу вимірюється в байтах, як і обсяг пам'яті.

Розмір файлу може становити 0 байт, це означає, що файл існує, але нічого не містить. S Максимальний розмір файлу – 4 Гбайт. Але такі великі файли зустрічаються дуже рідко.

Вбудований годинник комп'ютера потрібний, зокрема, для присвоєння файлам часу та дати їх створення. Цим пояснюється те, як важливо правильно налаштувати цей годинник. Є ще й додаткові атрибути для опису файлів, наприклад системні файли, приховані файли, файли, призначені лише для читання, архівні файли і т.д. Операційна система із цим розбереться сама.

Кожен файл має унікальний індекс. Індекс містить інформацію, необхідну для будь-якого процесу для того, щоб звернутися до файлу. Процеси звертаються до файлів, використовуючи чітко визначений набір системних дзвінків та ідентифікуючи файл рядком символів, які є складовим ім'ям файлу. Кожне складене ім'я однозначно визначає файл, завдяки чому ядро ​​системи перетворює це ім'я на індекс файлу. Індекс включає таблицю адрес розташування інформації файлу на диску. Так як кожен блок на диску адресується за своїм номером, у цій таблиці зберігається сукупність номерів дискових блоків. З метою підвищення гнучкості ядро ​​приєднує до файлу по одному блоку, дозволяючи інформації файлу бути розкиданою по всій файловій системі. Але така схема розміщення ускладнює завдання пошуку даних. Таблиця адрес містить список номерів блоків, що містять що належить файлуінформацію, однак, прості обчислення показують, що лінійним списком блоків файлу в індексі важко керувати. Для того, щоб невелика структура індексу дозволяла працювати з великими файлами, таблиця адрес дискових блоків приводиться у відповідність до структури.

Текстові та бінарні файли

Файли дозволяють користувачеві зчитувати великі обсяги даних безпосередньо з диска без введення їх з клавіатури. Існують два основні типи файлів: текстові та двійкові.

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

У двійкові хфайлахінформація зчитується і записується як блоків певного розміру, у яких можуть зберігатися дані будь-якого виду і структури.

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

У програмах на C++ під час роботи з текстовими файлами необхідно підключати бібліотекиifstream та iostream.

Для того, щоб записувати дані в текстовий файл, необхідно: 1)описати змінну типу ofstream open; 3) вивести інформацію у файл; 4) обов'язково закрити файл.

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

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

Слід зазначити, що у всіх розглянутих прикладах функція fopen() в режимах “r” і “w” відкриває текстовий файл на читання і запис відповідно. Це означає, що деякі символи форматування тексту, наприклад повернення каретки '\r' не можуть бути раховані як окремі символи, їх хоч як існує у файлі, але при цьому вони там є. Це особливість текстового режиму файлу. Для більш «тонкої» роботи з вмістом файлів існує бінарний режим, який представляє вміст файлу як послідовність байтів, де всі можливі коди, що управляють, є просто числами. Саме в цьому режимі можливе видалення або додавання символів керування недоступних у текстовому режимі. Для того щоб відкрити файл у бінарному режимі використовується також функція fopen() з останнім параметромрівним “rb” та “wb” відповідно для читання та запису.

У наведеному вище прикладі "довшим" є варіант "b": для нього потрібно 23 байта (21 байт для рядка і 2 байта для цілого числа). Для варіантів "n" та "m" потрібно 4 та 5 байт відповідно (див. таблицю).

name, publisher item Варіантна частина

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

Бінарні файли зберігають інформацію у вигляді, як вона представлена ​​у пам'яті комп'ютера, і тому незручні для людини. Заглянувши до такого файлу, неможливо зрозуміти, що в ньому записано; його не можна створювати чи виправляти вручну - у якомусь текстовому редакторі- і т.п. Однак усі ці незручності компенсуються швидкістю роботи з даними.

Крім того, текстові файливідносяться до структур послідовного доступу, а бінарні – прямого. Це означає, що в будь-який момент часу можна звернутися до будь-якого, а не тільки до поточного елементу файлу.

Типізовані файли

Змінні структуровані типи даних (крім рядкового) неможливо рахувати з текстового файлу. Наприклад, якщо потрібно ввести з текстового файлу дані для наповнення запису toy інформацією про наявні у продажу іграшки (назва товару, ціна товару та віковий діапазон, для якого іграшка призначена):

age: set of 0..18; (у файлі встановлено межами)

то доведеться написати наступний код:

c: char; i,j,min,max: integer;

a: array of toy;

begin assign(f,input); reset(f);

for i:=1 to 100 do if not eof(f)

then with a[i] do

begin readln(f,name,price,min,max); age:=;

для j:= min до max до age:=age+[j];

Як бачимо, таке поелементне зчитування дуже незручне та трудомістке.

Вихід із цієї ситуації пропонують типізовані файли- їх елементи можуть належати до будь-якого базового чи структурованого типу даних. Єдине обмеження: всі елементи мають бути одного й того самого типу. Це здається незручність є

неодмінною умовою для організації прямого доступу до елементів бінарного файлу: як і у випадку масивів, якщо точно відома довжина кожного компонента структури, то адреса будь-якого компонента може бути обчислена за дуже простою формулою:

<начало_структуры> + <номер_компонента>*<длина_компонента>

Опис типізованих файлів

У розділі var файлові змінні, призначені для роботи з типізованими файлами, описуються наступним чином:

var<файловая_перем>: file of<тип_элементов_файла>;

Жодна файлова змінна не може бути задана константою.

Призначення типізованого файлу

З цього моменту і до кінця розділу під словом "файл" ми маємо на увазі " бінарний типізований файл(Зрозуміло, якщо спеціально не обумовлено інше).

Команда assign(f,"<имя_файла>"); служить для встановлення зв'язку між файловою змінною f та ім'ям того файлу, за роботу з яким ця змінна відповідатиме.

Рядок "<имя_файла>" може містити повний шлях до файлу. Якщо шлях не вказаний, файл вважається розташованим у тій же директорії, що і модуль програми, що виконується.

Відкриття та закриття типізованого файлу

Залежно від того, які дії ваша програма збирається робити з файлом, що відкривається, можливе двояке його відкриття:

reset(f); - Відкриття файлу для зчитування з нього інформації і одночасно для запису в нього (якщо такого файлу не існує, спроба відкриття викликає помилку). Ця команда служить повернення покажчика початку файла;

rewrite(f); - Відкриття файлу для запису в нього інформації; якщо такого файлу немає, він буде створено; якщо файл з таким ім'ям вже є, вся інформація, що в ньому раніше, зникне.

Закриваються типізовані файлипроцедуроюclose(f) , загальної всім типів файлів.

Зчитування з типізованого файлу

Читання з файлу, відкритого для зчитування, виконується за допомогою команди read(). У дужках спочатку вказується ім'я файлової змінної, а потім список введення1) :

Вводити з файлу можна лише змінні відповідного оголошення типу, але цей тип даних може бути структурованим. Скажімо, якщо повернутись до прикладу, наведеного на початку п. " Типізовані файли", то стане очевидним, що використання типізованого файлузамість текстового дозволить значно скоротити текст програми:

type toy = record name: string; price: real;

age: set of 0..18; (задано межами)

var f: file of toy;

a: array of toy; begin

assign(f,input);

for i:=1 to 100 do

if not eof(f) then read(f,a[i]); close (f);

Пошук у типізованому файлі

Вже знайома нам функція eof(f:file):boolean повідомляє про досягнутий кінець файлу. Решта функцій "пошуку кінця" (eoln() ,seekeof() іseekeoln() ), властиві текстовим файлам, не можна застосовувати до файлівтипізованим .

Зате існують спеціальні підпрограми, які дозволяють працювати з типізованими файламияк із структурами прямого доступу:

1. Функція filepos(f:file):longint повідомить поточне положення покажчика у файліf. Якщо він вказує на кінець файлу, що містить N елементів, то ця функція видасть результат N . Це легко можна пояснити: елементи файлу нумеруються починаючи з нуля, тому останній елементмає номер N-1. А номер N належить, таким чином, "неіснуючому" елементу - ознакою кінця файлу.

2. Функція filesize(f:file):longint обчислить довжину файлаf.

3. Процедура seek (f: file, n: longint) пересуне покажчик у файлі f на початок запису з номером N . Якщо виявиться, що більше фактичної довжини файлу, то покажчик буде пересунутий і за реальний кінець файлу.

4. Процедура truncate(f:file) обріже "хвіст" файлаf: всі елементи починаючи з поточного і до кінця файлу будуть з нього видалені. Насправді відбудеться лише переписування ознаки "кінець файлу" в те місце, куди вказував покажчик, а фізично "відрізані" значення залишаться на колишніх місцях - просто вони стануть "безхазяйними".

Запис у типізований файл

Зберегти змінні у файл, відкритий для запису, можна за допомогою команди write(). Так само як і у разі зчитування, першою вказується файлова змінна, а за нею – список виводу:

write(f,a,b,c); - Записати у файл f (попередньо відкритий для запису командами rewrite (f) або reset (f)) змінні a, b, c.

Виводити в типізований файлможна лише змінні відповідного опису типу даних. Нейменовані та нетипізовані константи не можна виводити в

типізований файл.

Типізовані файлирозглядаються як структури одночасно і прямого та послідовного доступу. Це означає, що запис можливий не тільки в кінець файлу, але і в будь-який інший його елемент. Значення, що записується, замістить попереднє значення в цьому елементі (старе значення буде "затерто").

Наприклад, якщо потрібно замістити п'ятий елемент файлу значенням, що зберігається в змінній а , слід написати наступний уривок програми:

seek(f,5); (покажчик буде встановлено початку 5-го елемента)

write(f,a); (покажчик буде встановлено на початок 6-го елемента)

Бінарний файл – це будь-який файл на вашому комп'ютері. Вся інформація на комп'ютері та пов'язаних з ним носіях записана в бітах (звідси й назва). Однак, для порівняння, текстовий файл можна прочитати у відповідних розширення рідерах (найпростіші - навіть у Блокноті), а файл, що виконується - ні. І хоч фактично txt-файл є тим самим бінарним файлом, але коли говорять про проблему відкриття вмісту бінарних файлів, мають на увазі файли, що виконуються, а також стислі дані.

Вам знадобиться

  • - Програма Hex Edit.

Інструкція

  • Завантажте на вінчестер прогаму Hex Edit - редактор файлів, що представляє їхній вміст у двійковому вигляді. Відкрийте програму, двічі клікнувши мишею по стартовому файлу. Це програмне забезпеченнядозволяє в режимі реального часу читати бінарні файли, змінювати вміст, додавати свої власні записи та багато іншого. Щоб повноцінно працювати в даному середовищі, вам потрібно трохи знати про загальних поняттяхбінарних файлів.
  • Вікно програми мало чим відрізняється від звичайного редактора: знайомі меню та панель з кнопками, тіло редагованого файлу, закладки та рядок стану. Відкрийте бінарний файл через меню File або натиснувши відповідну піктограму на панелі. Бінарний файл постане перед вами у вигляді рядків із цифрами та літерами. Не плутайте ці символи із друкованими даними текстових файлів. Їх можна також редагувати, видаляючи символи, проте при цьому ви видалите комірки з даними, шматочки файлу.
  • Внесіть зміни до вмісту файлу. Програма може показати важливі частини файлу для зручнішого пошуку, а також має гнучке налаштування графічного відображення двійкового коду. Перейдіть до режиму ASCII+IBM/OEM, щоб побачити програмний код файлу. Якщо ви внесете неправильні рядки у файл, він може працювати некоректно, спричинивши серйозні наслідки в операційній системі персонального комп'ютера.
  • Збережіть зміни. Якщо у вас немає досвіду в такому редагуванні файлів, будьте готові до того, що файл не відкриється та відмовиться працювати після внесення змін. Ви, швидше за все, зіпсуєте кілька копій, перш ніж досягнете результату. Намагайтеся не зберігати всі зміни в Вихідний файлщоб його вміст залишався незмінним.
  • У багатьох часто виникає питання, як відкрити бінарний файл. Цей документ є будь-яким файлом, який знаходиться на персональному комп'ютері. Всі дані, які знаходяться на комп'ютерах і носіях, пов'язаних з ним, зазвичай записуються в бітах. Саме від цього слова і походить назва. Якщо порівняти навести простий текстовий файл, то проблем з його читанням не виникне. Для цього достатньо мати на комп'ютері звичайний редактор, навіть зійде блокнот. Щоб відкрити бінарний файл, простим блокнотомобійтися не вийде. І якщо говорити про те, що інформація текстових файлів зашифровується тими ж бітами, то зазвичай, коли говорять про читання бінарних файлів, мають на увазі виконувані документи.

    Інструкція до дії

    По-перше, на жорсткий дискперсонального комп'ютера необхідно встановити програмний засібпід назвою HexEditor, яке є простим редактором для бінарних файлів. Після встановлення програму слід відкрити, клацнувши двічі кнопкою миші по іконці. Цей засіб дозволить читати бінарний файл в реальному режимі. При цьому можна змінювати дані у файлі, додавати інформацію і т.д. Для того щоб працювати в даному редакторі і змінювати бінарний файл, необхідно мати хоч якісь знання в цій сфері діяльності.

    По-друге, необхідно ознайомитися з головним вікном не має великих відмінностей від вікна звичайного редактора. Ті самі кнопки, те саме меню, тіло документа, закладки та рядки стану. Відкрити файл, що цікавить, можна через вкладку File або через спеціальну кнопку, яка розташовується на в програмі. Після цього можна буде побачити файл, що виконується у вигляді цифр і літер. Не варто плутати символи, за допомогою яких представлений бінарний файл, і ті, які має звичайний редактор. У тому випадку, якщо буде ухвалено рішення про видалення або зміну будь-якої ділянки документа, слід розуміти, що зникне або зміниться якась його частина.

    По-третє, за допомогою програми можна спробувати змінити будь-яку ділянку документа. Як було сказано раніше, програмний засіб показує файл у такому вигляді, що покращує способи пошуку необхідної частини документа. До того ж програма має достатньо гнучким налаштуванням. За допомогою неї можна змінити графічне відображення двійкового коду, який має бінарний файл. У тому випадку, якщо в якусь ділянку файлу будуть внесені неправильні дані, то він може або повністю перестати працювати, або почне працювати не зовсім коректно. У будь-якому випадку введення таких даних викликає зміни як операційній системі, так і безпосередньо в персональному комп'ютері.

    По-четверте, після зміни, видалення чи додавання певних даних у файлі слід зберегти результат своєї роботи. У тому випадку, якщо достатнього досвіду в редагуванні файлів у вас немає, слід бути готовим до не зовсім приємних наслідків. Наприклад, документ може перестати працювати після зміни даних. Доки ви не почнете добре розбиратися в цьому питанні, буде зіпсовано дуже багато копій файлів. Якщо ви не впевнені у своїх можливостях, змінювати дані самостійно не варто, особливо в тих ситуаціях, коли виправити необхідно бінарний файл su.

    Файли. При цьому з погляду технічної реалізаціїна рівні апаратури, текстові файли є окремим випадком двійкових файлів, і, таким чином, у широкому значенні слова під визначення «двійковий файл» підходить будь-який файл.

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

    Візуалізація

    Для наочного уявлення двійкового файлу він розбивається на шматки рівного розміру, що подаються у вигляді чисел, що записуються, зазвичай, у шістнадцятковій системі, іноді у вісімковій, двійковій або десятковій. Зазначений розмір шматка може дорівнювати одному октету, а також двом або чотирьом (у разі розбиття на шматки по кілька октетів застосовується порядок байтів, прийнятий на платформі, що використовується). Залежність діапазону чисел від розміру шматка показана в таблиці:

    октетів у біт шістнадцяткове вісімкове десяткове
    беззнакове
    десяткове
    знакове
    1 8 00

    FF
    000

    377
    0

    255
    -128

    127
    2 16 0000

    FFFF
    000000

    177777
    0

    65535
    -32768

    32767
    4 32 00000000

    FFFFFFFF
    00000000000

    37777777777
    0

    4294967295
    -2147483648

    2147483647

    Нерідко, крім числових значень байт, виводяться також символи кодової сторінки, наприклад друкованими ASCII-символами справа) початку PNG-файлу логотипу Вікіпедії:

    00000000 89 50 4e 47 0d 0a 1a 0a 00 00 00 0d 49 48 44 52 |.PNG........IHDR| 00000010 00 00 00 87 00 00 00 a0 08 03 00 00 00 11 90 8f |................| 00000020 b6 00 00 00 04 67 41 4d 41 00 00 d6 d8 d4 4f 58 |.....gAMA.....OX| 00000030 32 00 00 00 19 74 45 58 74 53 6f 66 74 77 61 72 |2....tEXtSoftwar| 00000040 65 00 41 64 6f 62 65 20 49 6d 61 67 65 52 65 61 |e.Adobe ImageRea| 00000050 64 79 71 c9 65 3c 00 00 03 00 50 4c 54 45 22 22 |dyq.e<....PLTE""| 00000060 22 56 56 56 47 47 47 33 33 33 30 30 30 42 42 42 |"VVVGGG333000BBB| 00000070 4b 4b 4b 40 40 40 15 15 15 4f 4f 4f 2c 2c 2c 3c |KKK@@@...OOO,<| 00000080 3c 3c 3e 3e 3e 3a 39 39 04 04 04 1d 1d 1d 35 35 |<<>>>:99......55| 00000090 35 51 50 50 37 37 37 11 11 11 25 25 25 0d 0d 0d |5QPP777...%%%...| 000000a0 27 27 27 1a 1a 1a 38 38 38 2a 2a 2a 08 08 08 20 |""...888***... | 000000b0 20 20 17 17 17 2e 8 bb ..............|

    Інструменти

    Для візуалізації

    • debug (в Microsoft Windows, частково)
    • hexdump (у GNU/Linux тощо)

    Для редагування

    Література

    • Webster's New World Dictionary of Computer Terms, 4th. Ed, Prentice Hall, NY, 1992. ISBN 0-671-84651-5
    • Леонтьєв Б. К. Формати файлів Microsoft Windows XP: Довідник, М: ЗАТ «Новий видавничий дім», 2005. ISBN 5-9643-0059-6

    Wikimedia Foundation. 2010 .

    Дивитись що таке "Бінарний файл" в інших словниках:

      Сущ., м., упот. порівняння. часто Морфологія: (ні) чого? файлу, ні? файлу, (бачу) що? файл, ніж? файлом, про що? про файл; мн. що? файли, (ні) чого? файлів, ніж? файлів, (бачу) що? файли, ніж? файлами, про що? про файли 1. Файлом називається масив… … Тлумачний словник Дмитрієва

      Двійковий (бінарний) файл у сенсі: послідовність довільних байтів. Назва пов'язана з тим, що байти складаються з біт, тобто двійкових цифр (англ. binary). У вузькому значенні слова двійкові файли протиставляються текстовим файлам.

      Двійковий (бінарний) файл у сенсі: послідовність довільних байтів. Назва пов'язана з тим, що байти складаються з біт, тобто двійкових цифр (англ. binary). У вузькому значенні слова двійкові файли протиставляються.

      конфігураційний файл- Бінарний або текстовий файл, що містить інформацію, що визначає поведінку програми, комп'ютера чи мережного пристрою. Тематики обчислювальні мережі EN configuration file … Довідник технічного перекладача

      Цей термін має інші значення, див. IPA (значення). .IPA формат архівних файлів програм від Apple для iPhone, iPod Touch та iPad. Файли з даним розширенням зберігаються в магазині App Store і завантажуються за допомогою iTunes для ... Вікіпедія

      Ця стаття чи розділ потребує переробки. У Паскалі немає модулів, ОВП та інших новомодних віянь. Опис розширень має бути присутнім лише у статтях про відповідність … Вікіпедія

      Pascal Семантика: процедурний Тип виконання: компілятор З'явився в: 1970 р. Автор(и): Ніклаус Вірт Паскаль (англ. Pascal) високорівнева мова програмування загального призначення. Одна з найвідоміших мов програмування, … Вікіпедія

      Gopher Назва: Gopher Порт/ID: 70/TCP Специфікація: RFC 1436 Основні реалізації (клієнти): Mozilla Firefox, Microsoft Windows: IE 5.x, IE 6 (обмежено MS) Gopher мережевий протокол розподіленого пошуку та передачі документів, колишній широко рас … Вікіпедія

      Назва: Gopher Порт/ID: 70/TCP Специфікація: RFC 1436 Основні реалізації (клієнти): Mozilla Firefox, Microsoft Windows: Internet Explorer 5.x, Internet Explorer 6 (обмежено MS) Gopher мережевий протокол розподіленого пошуку та передачі ... Вікіпедія

      - / * Примітка: Оскільки розширення імені файлу може бути будь-яким, представлений список не є повним … Вікіпедія