1186 / 542 / 78
Регистрация: 01.07.2009
Сообщений: 3,517
|
||||||||||||||||
1 | ||||||||||||||||
Файл произвольного доступа03.07.2011, 14:36. Показов 5783. Ответов 34
Метки нет (Все метки)
Очень прошу помощи так как не могу с ними разобраться который день, видать делаю одну и ту же ошибку но не нахожу. Создаю свой класс и потом когда пытаюсь его записать и считать возникают ошибки.
Ну да наверное проще начать обо всём по порядку чтобы не запутывать. Проблема первая: файл каждый раз после записи 10 объектов моего класса в бинарном режиме при открытии текстовым редактором выглядит по разному, хотя размер его одинаковый, это меня настораживает. Пример: запускаю скомпилированное приложение чтобы оно записало 10 объектов моего класса ClientData созданных конструктором по умолчанию и открываю через текстовый редактор и вижу символы :u.ы-I, закрываю и открываю опять своё приложение и вижу уже символы :ucИќ, за третим разом :uО(фҐ , тоесть первые 2 символа всегда те же, а остальные меняются, так ведь быть не должно? Значит ошибка у меня в классе? Тогда просьба подсказать где именно вроде строки уже не использую и все типы данных не должны меняться ... Сам класс ClientData мой представляет собой класс с 3мя данными (номер, имя, баланс) и set и get методами для них (проверок кое-где нету, но не в них суть). ClientData.h (Заголовочный файл к классу)
0
|
03.07.2011, 14:36 | |
Ответы с готовыми решениями:
34
Файл произвольного доступа Файл произвольного доступа Не могу прочитать файл произвольного доступа с конца Создание файла произвольного доступа |
1186 / 542 / 78
Регистрация: 01.07.2009
Сообщений: 3,517
|
|
08.07.2011, 01:25 [ТС] | 23 |
easybudda, годиться, а теперь бы ещё чего подобного на удаление файла (задача обновить старый файл новым, то есть удалить старый и переименовать новый чтобы он назывался так же как и старый).
0
|
1186 / 542 / 78
Регистрация: 01.07.2009
Сообщений: 3,517
|
|
08.07.2011, 12:22 [ТС] | 25 |
Годиться, сейчас попробую применить.
Ну и ещё один вопрос что возник при чтении книги: а как-то можно указать постоянные пути к файлу? Пробовал писать что-то вроде open("c:\1.txt",ios::int) но оно хоть и компилируется, но файл не видит тогда ни в корне диска с, ни в папке с программой, подозреваю что оно начинает искать в папке с программой файл с именем "c:\1.txt" и не находит его.
0
|
Freelance
2891 / 1826 / 356
Регистрация: 09.09.2010
Сообщений: 3,841
|
|
08.07.2011, 12:25 | 26 |
Gepar, Поставь двойной бэкслеш: c:\\1.txt
1
|
1186 / 542 / 78
Регистрация: 01.07.2009
Сообщений: 3,517
|
|
08.07.2011, 16:00 [ТС] | 27 |
А вот ещё пока класс пишу возник вопрос: как почистить файл от данных (файл последовательного доступа, просто символьные данные в нём). Можно бы закрыть файл и открыть файл снова например (ios::out) и тогда всё содержимое должно убраться, но так как планируется это делать из функции то тогда вопрос связанный с этим: как узнать в функции какой же файл ей передан ?Есть функция например
void del(fstream& file), как же узнать что этот file является моим 1.txt например? Тогда бы я смог его закрыть и открыть в функции снова например чтобы почистить, хотя может есть и просто функция чтобы файл очистить то? Добавлено через 4 минуты asics, так работает, странно что я сам с двумя слешами не додумался попробовать файл открывать.
0
|
1186 / 542 / 78
Регистрация: 01.07.2009
Сообщений: 3,517
|
|
09.07.2011, 19:06 [ТС] | 29 |
А узнать из функции что за файл ей передали всё же можно (получая только файл)? Это так, для общего развития, ну там например чтобы функция print выводила в начале название файла что она печатает, только именно функция, а не в main там перед тем как печатать файл уже. Возможность получить название класса объект которого получен есть ведь, вот думаю и здесь может всё же что-то есть изначально.
Добавлено через 2 минуты Это заодно и помогло бы с функцией remove, которой название файла же надо получить. Оно то можно сделать символьную строку в main и её и передавать как аргумент сначала при создании файла, а потом и при удалении, но хотелось бы похитрее Добавлено через 5 часов 25 минут Что-то не подключается этот truncate с #include <unistd.h>, всё равно пишет что не объявлен никакой truncate. Добавлено через 51 минуту И ещё маленький вопрос (надеюсь не задолбал я всех ещё ): есть ли какая функция для работы с файлами чтобы убирала сразу и конец файла и устанавливала курсор в начало файла? Я постоянно то забуду курсор перевести то метку конца файла сбросить и потом сижу ищу где я протупил, было бы хорошо будь одна функция делающая и первое и второе.
0
|
Freelance
2891 / 1826 / 356
Регистрация: 09.09.2010
Сообщений: 3,841
|
|
09.07.2011, 19:11 | 30 |
0
|
1186 / 542 / 78
Регистрация: 01.07.2009
Сообщений: 3,517
|
|
10.07.2011, 02:30 [ТС] | 32 |
easybudda, нет, ну удобнее и нагляднее было бы да и вообще неужто для выброса исключений не придумали хотя бы функции возвращающей имя файла.
asics, ну мне приходится пользоваться seekg / seekp + приходится чистить конец файла с помощью file.clear. Когда перестанавливаешь курсор конец файла не убирается же так что после переустановки курсора через seekg(0) цикл while(!file.eof()) выполняться не будет так как конец файла уже установлен в 1. Иными словами seekg(0) не убирает метку конца файла вот я и хотел бы как-то хитро чтобы и конец файла убирало и в начало файла переставляло.
0
|
1186 / 542 / 78
Регистрация: 01.07.2009
Сообщений: 3,517
|
|
11.07.2011, 07:37 [ТС] | 33 |
Это уже винапи, слишком как-то как для обыкновеннейшей очистки файла от данных.
0
|
Модератор
12454 / 7479 / 1752
Регистрация: 25.07.2009
Сообщений: 13,752
|
||||||
11.07.2011, 10:21 | 34 | |||||
Ну да, так unistd.h - *NIX API... Есть ещё способ очистить файл, но он, видимо, слишком простой
0
|
1186 / 542 / 78
Регистрация: 01.07.2009
Сообщений: 3,517
|
|
11.07.2011, 12:17 [ТС] | 35 |
easybudda, не, си тоже не пойдёт, когда так открываешь файл то теряешь возможность писать в него всё скопом через ввод в поток вида f<<infromation<<endl<<... Я видел что у си там побольше возможностей по открытию файла.
0
|
11.07.2011, 12:17 | |
11.07.2011, 12:17 | |
Помогаю со студенческими работами здесь
35
Создание файла произвольного доступа. Детектировать итератор произвольного доступа Обработка файлов произвольного доступа Пишу итератор произвольного доступа Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |