Перейти до вмісту

Кінець файлу


Повідомлень в темі: 8

#1 Shaman

    Частий гість

  • Користувачі
  • PipPipPip
  • 38 повідомлень

Відправлено 06.01.2007 – 17:04

  • 8
Добрий день у мене виникло таке питання є в мене певний файл у нього як я розумію є який символ кінця файлу якщоь так то цей символ повинен мати якийсь код, якщо ви знаєте то підкажіть який код символу кінця файлу

#2 zloy bober™

    Постійний житель

  • Користувачі
  • PipPipPipPipPip
  • 187 повідомлень
  • Стать:Чоловік
  • Місто:Чорнобиль

Відправлено 06.01.2007 – 17:12

ееее... трохи знаючи, ЩО таке програмування, можу сказати тільки одне: здається все закічується кодом 'end'...
  • 0

#3 Xobb

    Doctor What'son

  • Користувачі
  • PipPipPipPipPipPipPipPipPipPip
  • 1481 повідомлень
  • Стать:Чоловік

Відправлено 06.01.2007 – 17:35

це залежить від операційної системи. така сама штука як і з переносом строчки. наприклад в вінді перенос строчки буде виглядати так:
\n
в лінуксі так:
\n\r

для цього придумали константи, які встановлюються операційною системою. Для стрічки -- EOL, для файла -- EOF

користуйся цими константами і не промахнешся.
  • 0

#4 Shaman

    Частий гість

  • Користувачі
  • PipPipPip
  • 38 повідомлень

Відправлено 06.01.2007 – 23:35

Я користуюсь EOF і у мене просто файл до кінця нечитається, я думав може натрапляє на цей символ і закінчує читати
  • 0

#5 Lukom

    Абориген

  • Користувачі
  • PipPipPipPip
  • 112 повідомлень
  • Стать:Чоловік
  • Місто:Ukraine-Lviv

Відправлено 11.01.2007 – 13:45

Я так зрозумів, що файл треба прочитати посимвольно.

Код на C++:
#include<conio.h>
#include<fstream.h>

void main()
{
	char c;

	clrscr();
	ifstream f("d:/f.txt");

	if(!f)
	{
		cout<<"Помилка читання файлу";
		getch();
		return;
	}

	while(!f.eof())
	{
		f >> c;
		cout << c;
	}
	getch();
}
чомусь не читає спец символів '\n' та ін...

Код на C:
#include <stdio.h>
#include <conio.h>

FILE *input;

void main()
{
	char c;
	input = fopen("d:/f.txt", "r");
	while((c = (char)fgetc(input)) != EOF)
		printf("%c", c);
	fclose(input);
   getch();
}

До речі EOF = -1 = 0xffffffff
  • 0

#6 Сварус

    Старійшина

  • Користувачі
  • PipPipPipPipPipPipPipPipPipPip
  • 3815 повідомлень
  • Стать:Чоловік
  • Місто:Вінниця

Відправлено 12.01.2007 – 05:42

Справа в тому що символ EOF може не обов`язково зустрічатися тільки в кінці файлу. На скільки я пам`ятаю символом кінця файлу ще вважається ESC з ASCII кодом 27. Але якщо розглядати не текстові а бінарні файли (різні exe, rar, jpg, та купа інших) то даний символ може зустрічатись в файлі десятки разів. Тому для того аби можна було зчитати всі символи файлу, а не до першого EOF-коду, особисто я роблю наступним чином - спочатку взнаю розмір файлу Size а потім простим смертним циклом з кількістю ітерацій в Size(звісно якщо зчитування посимвольне а не блокове) зчитую дані.
  • 0

#7 mim

    Генеральний писар

  • Користувачі
  • PipPipPipPipPipPipPipPipPip
  • 680 повідомлень
  • Стать:Чоловік
  • Місто:Київ

Відправлено 28.01.2007 – 20:12

Цікаво.... :angry2:
Беремо, тиснемо праву кнопку миші над Робочим столом, і обираємо "Создать текстоый файл". Потім дивимося на властивості того файлу, і бачимо, що його розмір 0 байт (1 кб на диску, але це геть інша історія). Питання: а де ж тоді символ EOF, коли там взагалі жодного байту нема? Відповідь: нема такого символу. Операційна система розміщує файли на диску, пам'ятає, скільки місця займає той чи інший файл, де він починається і де закінчується. А EOF - це функція ОС, яка каже, чи є ще інформація у файлі, чи вже все прочитано. Окремі файли окремих форматів можуть закінчуватись певним байтом, або кількома байтами, але це вже залежить від формату.
  • 0

#8 KykyRyDZA

    Писар

  • Користувачі
  • PipPipPipPipPipPipPipPip
  • 498 повідомлень
  • Стать:Чоловік
  • Місто:Львів

Відправлено 31.01.2007 – 19:10

Перегляд дописуShaman (6.01.2007 17:01) писав:

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

#9 Lukom

    Абориген

  • Користувачі
  • PipPipPipPip
  • 112 повідомлень
  • Стать:Чоловік
  • Місто:Ukraine-Lviv

Відправлено 31.01.2007 – 21:05

Перегляд дописуmim (28.01.2007 20:09) писав:

Цікаво.... :yes:
Беремо, тиснемо праву кнопку миші над Робочим столом, і обираємо "Создать текстоый файл". Потім дивимося на властивості того файлу, і бачимо, що його розмір 0 байт (1 кб на диску, але це геть інша історія). Питання: а де ж тоді символ EOF, коли там взагалі жодного байту нема? Відповідь: нема такого символу. Операційна система розміщує файли на диску, пам'ятає, скільки місця займає той чи інший файл, де він починається і де закінчується. А EOF - це функція ОС, яка каже, чи є ще інформація у файлі, чи вже все прочитано. Окремі файли окремих форматів можуть закінчуватись певним байтом, або кількома байтами, але це вже залежить від формату.

Клас, ти мені розкрив очі :) Я раніше тупо думав шо файли на диску зберігаються як стрічки в сішці. Виявляється це не так. Після того як програма зчитала файл, вона буде до безконечності повертати символ кінця файлу. Таким чином взявши хендл на якийсь файл можна прочитати тільки цей файл, і не можна прочитати кусок іншого файлу. Я вражений до самих коренів! :yes:
  • 0



Кількість користувачів, що читають цю тему: 1

0 користувачів, 1 гостей, 0 анонімних


Магазин кубиков Рубика Cubes.in.ua