|
9 / 9 / 2
Регистрация: 02.11.2012
Сообщений: 153
|
||||||
Чтение/запись файла20.02.2013, 03:49. Показов 1519. Ответов 11
Метки нет (Все метки)
Вот сделал такую прогу. Очень простая. Создает файл, где есть 100 полей.
Каждое поле это строка из индекса, названия, кол-ва (например тут инструментов), цены. например 5 Молоток 10 50.50 И реализовал простенькие методы для работы. Но почему-то не работает 5 метод. Когда я создаю два объекта 1 молоток 2 4 2 тяпка 6 8 А после этого изменяю кол-во молотков с двух на любое число, которое имеет более одного знака, то это каким-то образом влияет на тяпку и при выводе печатает полный бред. При этом изменение названия молотка либо же цены молотка проходит абсолютно нормально. При этом все эти три метода почти полные копии друг друга и поэтому я вот всё пытаюсь найти где же ошибка. Кто даст ответ или натолкнет проплюсую все ответы в этой теме, слишком уж много кода тут.
0
|
||||||
| 20.02.2013, 03:49 | |
|
Ответы с готовыми решениями:
11
Запись и чтение из файла |
|
5500 / 4895 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
|
|
| 20.02.2013, 05:18 | |
|
Я такой ошибки не получил, но... Почитайте это: http://www.kalinin.ru/programm... 7_00.shtml
http://habrahabr.ru/post/142662/ Размер вашей структуры 46 байт. sizeof(Instrument) показывает у меня - 48. При записи в файл памяти под структурой будут записываться два лишних байта. Поэтому писать в файл нужно именованные поля структуры, а не память под ней(или использовать специальные приёмы для задания выравнивания: Использование #pragma pack(push,1)... pack(pop)). Читать тоже в именованные поля структуры. Потом, непонятна цель первоначальной записи 100 пустых структур в файл.
1
|
|
|
9 / 9 / 2
Регистрация: 02.11.2012
Сообщений: 153
|
|
| 20.02.2013, 14:21 [ТС] | |
|
Ну 100 пустых структур нужно для того, чтобы например они не по порядку записывались, а чтобы например записать в первую и 53 строку и т.д.
Добавлено через 28 минут Ещё данную ошибку можно воспроизвести так, например ввести такой инструмент 1 molot 10 5 Важно, чтобы после названия шло число двухзначное. А затем попробовать ввести инструмент с индексом 2, например 2 tyapka 3 4 Тогда программа напишет, что "Данный счёт уже существует", хотя это не верно. Добавлено через 33 минуты Но что если даже размер у него 48 байт? Ведь если я например сделал первую запись, то когда я делаю вторую запись я отступаю ведь тоже 48 байт от начала файла, а не 46. Значит всё должно быть ок.
0
|
|
|
179 / 165 / 21
Регистрация: 12.02.2013
Сообщений: 410
|
|
| 20.02.2013, 14:22 | |
|
kebal, прикрепи файл, с которым работает она)
0
|
|
|
9 / 9 / 2
Регистрация: 02.11.2012
Сообщений: 153
|
|||||||||||
| 20.02.2013, 15:13 [ТС] | |||||||||||
|
Это не имеет никакого значения, с каким файлом она работает, ведь при запуске программы содержимое файла очищается.
Вот опять же, использовал #pragma pack(push, 1) struct Instrument { ... }; #pragma pack(pop) Теперь sizeof(Instrument) даёт 46. И теперь опять если первая запись в виде 1 molot 10 5 то вторая запись уже выдаёт "Данный счёт уже существует". То есть хоть с использование #pragma pack хоть без первая запись залазит на вторую не понятно почему. Добавлено через 2 минуты А что ещё более занимательно, так это при вводе нового инструмента там стоит условие
Добавлено через 34 минуты в чём может быть проблема?
0
|
|||||||||||
|
5500 / 4895 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
|
|
| 20.02.2013, 15:18 | |
|
1
|
|
|
9 / 9 / 2
Регистрация: 02.11.2012
Сообщений: 153
|
|
| 20.02.2013, 15:45 [ТС] | |
|
Кстати с ios::binary работает и без #pragma pack. То, о чём я и говорил, просто отступает не 46, а 48 байтов, разве что просто режим был текстовый, потому и не работало.
0
|
|
|
5500 / 4895 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
|
||
| 20.02.2013, 15:51 | ||
|
0
|
||
|
9 / 9 / 2
Регистрация: 02.11.2012
Сообщений: 153
|
|
| 20.02.2013, 15:55 [ТС] | |
|
Всмысле "не работало, потому что код кривой"? Я поставил ios::binary и всё теперь работает, значит дело было только в этом. И почему писать в файл неизвестно что? В первой статье, на которую ты дал ссылку очень хорошо написано, почему например получилось не 46, а 48 байт. И опять же, если использовать #pragma pack, то ты разве что уменьшаешь кол-во отступов внутри файла, сокращая его размер. И "тогда был бред", а "сейчас не бред, так как уменьшили кол-во пробелов" как-то не очень стыкуется.
0
|
|
|
9 / 9 / 2
Регистрация: 02.11.2012
Сообщений: 153
|
|
| 20.02.2013, 16:02 [ТС] | |
|
Van111, я всего-лишь учился работать с файлами и я должен был понять почему происходит какая-либо ошибка.
0
|
|
|
5500 / 4895 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
|
|
| 20.02.2013, 16:04 | |
|
0
|
|
| 20.02.2013, 16:04 | |
|
Помогаю со студенческими работами здесь
12
Запись и чтение из файла Чтение и запись файла! запись\чтение из файла Запись и чтение с файла Запись и чтение с файла Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога
SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
|
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога
Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip"
Извлеките архив и вы увидите. . .
|
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога
Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д.
Сборка примера
Скачайте. . .
|
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога
Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
|
|
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net
REST сервисы временно не работают, только через Web.
Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
|
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
|
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
|
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма).
На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
|