Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.03.2010, 13:52   #1
newkobra
Пользователь
 
Регистрация: 29.04.2009
Сообщений: 33
По умолчанию Работа с файлами

Доброго времени суток!
У меня есть лабораторная по прямому доступу к файлу(создаем аналог бд).
Я вот только не могу себе представить как, это можна сделать. К примеру у меня одна запись в БД имеет стандартный размер 100 байт, как мне можна сразу перейти к записи по номеру 10? Ну и как все это сохранять. Ведь к примеру если я использую тип int то значит поле занимает 4 байта, но в файле записаное число может занимать от 1 до 10 байт.
newkobra вне форума Ответить с цитированием
Старый 14.03.2010, 14:21   #2
balalay12
Пользователь
 
Аватар для balalay12
 
Регистрация: 11.03.2010
Сообщений: 24
По умолчанию

Народ!!! Подскажите какой командой можно считать инфу из файла, чтобы вывести на экран? (Borland 3.1)
balalay12 вне форума Ответить с цитированием
Старый 14.03.2010, 14:54   #3
RoS
Форумчанин
 
Аватар для RoS
 
Регистрация: 13.12.2009
Сообщений: 272
По умолчанию

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

Пусть имя структуры - myDB
myDB dat;
fstream file("data.bin",ios::binary|ios:u t);
file.write(reinterpret_cast<char*>( &dat), sizeof(myDB));

А читай с помощью read, аналогичным образом...по файлу жвигайся с помощью seekg,...
ну как бы все
Если я помог вам - порадуйте меня, нажмите на весы слева
RoS вне форума Ответить с цитированием
Старый 14.03.2010, 15:13   #4
balalay12
Пользователь
 
Аватар для balalay12
 
Регистрация: 11.03.2010
Сообщений: 24
По умолчанию

я тут туго что разбираю (

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

Второе что за двоичный режим.

третье что делает вот эта строчка кода --> ios::binary|ios:u t);
balalay12 вне форума Ответить с цитированием
Старый 14.03.2010, 18:16   #5
Гром
Старожил
 
Аватар для Гром
 
Регистрация: 21.03.2009
Сообщений: 2,193
По умолчанию

balalay12
Вообще-то это было ТС'у, а не вам. Как бы одна тема - один автор.
Простые и красивые программы - коды программ + учебник C++
Создание игры - взгляд изнутри - сайт проекта
Тема на форуме, посвященная ему же
Гром вне форума Ответить с цитированием
Старый 14.03.2010, 18:36   #6
balalay12
Пользователь
 
Аватар для balalay12
 
Регистрация: 11.03.2010
Сообщений: 24
По умолчанию

аа... блин, извиняюсь ((
balalay12 вне форума Ответить с цитированием
Старый 15.03.2010, 01:04   #7
newkobra
Пользователь
 
Регистрация: 29.04.2009
Сообщений: 33
По умолчанию

спасибо кажеться работает.
только вот возникла проблема с концом файла. Как можна проверит находимся ли мы на конце файла? Попробовал написать такое:
Код:
fstream file(baseName,ios::binary|ios::in);
while(!file.eof())
{
}
но тогда при пустом файле, цикл выполняеться один раз.
newkobra вне форума Ответить с цитированием
Старый 15.03.2010, 09:03   #8
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

А ты получай размер файла, и если он равен нулю то не выполняй цикл.
Впрочим я удивлен что он выполняется при пустом файле.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 15.03.2010, 11:25   #9
newkobra
Пользователь
 
Регистрация: 29.04.2009
Сообщений: 33
По умолчанию

http://www.cplusplus.com/reference/iostream/ios/eof/
насколько я понял eof работает только если предидущая процедура считывания дошла до конца файла. А посколько перед этим я процедур не использовал - значит флаг не установлен. А как с помощью этого класа (fstream) узнать размер файла. И как лучше всего удалять и переименовівать файлі?
newkobra вне форума Ответить с цитированием
Старый 15.03.2010, 22:03   #10
newkobra
Пользователь
 
Регистрация: 29.04.2009
Сообщений: 33
По умолчанию

все кажеться нашел как узнать размер файла:
Код:
file.seekg (0, ios::end);
int FileSize = MainFile.tellg();
file.seekg (0, ios::beg);
И также переделал цикл:
Код:
int cur = file.tellg();	
while(cur!=FileSize)
{
...
cur = file.tellg()
}
Всем спасибо за помощь!!!
newkobra вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа с файлами [MI_nor] Общие вопросы C/C++ 4 08.03.2009 17:50
Работа с файлами snake-as Общие вопросы Delphi 1 19.10.2008 13:38
Работа с файлами Acros Помощь студентам 5 14.02.2007 18:40