Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.63/27: Рейтинг темы: голосов - 27, средняя оценка - 4.63
8 / 8 / 3
Регистрация: 17.05.2012
Сообщений: 50

Запись и чтение файла

10.09.2012, 16:13. Показов 5416. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте.

Странно ведет себя тестовая программа, которая записывает данные в файл и из него же считывает. Записывается в файл сначала переменная типа int, содержащая в себе количество элементов массива, а затем и сам массив типа double.
Для проверки при обеих процедурах данные выводятся в мемо.
При небольшом количестве элементов программа работает корректно, но, например, при 10000, в некоторый момент выводятся либо нули, либо большие числа.

Вот код записи в файл:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
    int pointcount = 10000;
    double* X = new double[pointcount];
 
    for(int i = 0; i<pointcount; i++)
        X[i] = i + 0.1234567;
 
    String FileName = ExtractFilePath(Application->ExeName) + "\\1.bin";
    FILE* pFile = _wfopen(FileName.c_str(), L"w");
 
    fwrite(&pointcount, sizeof(int), 1, pFile);
 
    fwrite(X, sizeof(double), pointcount, pFile);
 
    fclose(pFile);
 
    this->Memo1->Clear();
 
    Memo1->Lines->Add(IntToStr((int)pointcount));
    Memo1->Lines->Add("");
    for(int i = 0; i<pointcount; i++)
        Memo1->Lines->Add(FloatToStrF(X[i], ffFixed, 6,3));
 
    delete[] X;
И код чтения данных из файла:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
    int pointcount;
    double* X;
 
    String FileName = ExtractFilePath(Application->ExeName) + "\\1.bin";
    FILE* pFile = _wfopen(FileName.c_str(), L"r");
 
    fread(&pointcount, sizeof(int), 1, pFile);
    X = new double[pointcount];
    fread(X, sizeof(double), pointcount, pFile);
    fclose(pFile);
 
    this->Memo1->Clear();
    Memo1->Lines->Add(IntToStr((int)pointcount));
    Memo1->Lines->Add("");
    for(int i = 0; i<pointcount; i++)
        Memo1->Lines->Add(FloatToStrF(X[i], ffFixed, 6,3));
 
    delete[] X;
То, что выдает мемо после чтения из файла находится в прикрепленном текстовом файле (прошу прощения, пришлось сжать чтобы уместиться в предел 20кб).

Заранее спасибо за помощь.
Вложения
Тип файла: rar Текстовый документ.rar (5.4 Кб, 34 просмотров)
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
10.09.2012, 16:13
Ответы с готовыми решениями:

Запись и чтение из файла C++
Всем привет! У меня есть файл .b (Сохранение для GTA 3). Мне нужно написать простенький редактор сохранений для этой игры, чтобы менять...

Запись и чтение из файла
В общем, есть код, с помощью которого мы сохраняем полный путь к треку в файл и потом считываем этот путь из файла соответсвенно.. Способы...

Чтение/запись из файла
Здравствуйте! Такой вот вопрос: есть файл,который мы читаем, он представляет из себя массив одномерный в виде 10101010100010101010.......

6
+1
345 / 178 / 53
Регистрация: 24.08.2010
Сообщений: 1,028
11.09.2012, 08:59
Действительно странно.
В результате поисков, выявилось, что ошибка происходит в момент записи файла, почему-то добавляется лишний байт 0D в число с номером 2061.
Короче, косячит функция fwrite, попробуй писать в файл по-другому.
Миниатюры
Запись и чтение файла  
1
+1
345 / 178 / 53
Регистрация: 24.08.2010
Сообщений: 1,028
11.09.2012, 09:11
C++
1
// fwrite(&pointcount, sizeof(int), 1, pFile); // Первый int я в файл не писал
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33376 / 21500 / 8236
Регистрация: 22.10.2011
Сообщений: 36,896
Записей в блоге: 11
11.09.2012, 11:57
Цитата Сообщение от +1 Посмотреть сообщение
косячит функция fwrite
А может не надо говорить того, чего не понимаем? Добавляем 2 символа:

C++
1
2
3
4
5
6
7
// FILE* pFile = _wfopen(FileName.c_str(), L"w");
FILE* pFile = _wfopen(FileName.c_str(), L"wb");
 
// ... 
 
// FILE* pFile = _wfopen(FileName.c_str(), L"r");
FILE* pFile = _wfopen(FileName.c_str(), L"rb");
, и fwrite прямо тут же перестает "косячить"? Причина понятна?

Не по теме:

Я думал, наличие в файле неожиданных 0x0D+0x0A должно было сразу дать понять, что происходит. Ан нет, "fwrite косячит"...

0
+1
345 / 178 / 53
Регистрация: 24.08.2010
Сообщений: 1,028
11.09.2012, 19:02
Цитата Сообщение от UI Посмотреть сообщение
А может не надо говорить того, чего не понимаем?
Согласен, понятия не имею, что это значит L"wb", L"rb"
Цитата Сообщение от UI Посмотреть сообщение
наличие в файле неожиданных 0x0D+0x0A
0x0A как раз очень даже ожидаемо. А подталкнувшее на мысль сочетание 0x0D+0x0A - просто совпадение.
А без моей находки обнаружил бы причину?
В стомиллионный раз убеждаюсь: не делай добра, не получишь зла.
1
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33376 / 21500 / 8236
Регистрация: 22.10.2011
Сообщений: 36,896
Записей в блоге: 11
11.09.2012, 19:11
Цитата Сообщение от +1 Посмотреть сообщение
понятия не имею, что это значит L"wb", L"rb"
Почитай, узнаешь. Или здесь
Цитата Сообщение от +1 Посмотреть сообщение
А без моей находки обнаружил бы причину?
Я ее и обнаружил без твоей "находки". Первое, что проверяется при записи в файл - это что пишем (текст или бинарные данные), и в каком режиме открыт файл ("w"/"wb"/"wt"). Если пишем бинарные данные, то и файл должен быть открыт в бинарном режиме.
Цитата Сообщение от +1 Посмотреть сообщение
А подталкнувшее на мысль сочетание 0x0D+0x0A - просто совпадение.
Продолжай думать так дальше. И думать, что глючит fwrite - тоже. Так удобнее...
1
8 / 8 / 3
Регистрация: 17.05.2012
Сообщений: 50
12.09.2012, 14:32  [ТС]
UI,
Большое спасибо, действительно глупая ошибка получилась) Впредь буду знать.

+1,
Тоже спасибо, все таки приятно видеть что тебе пытаются помочь)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
12.09.2012, 14:32
Помогаю со студенческими работами здесь

Чтение\запись файла
Как в 6 Билдере читать построчно файл, содержащий текст (наверно в лучше в string или char*?), и потом записывать строки в другой файл...

Запись и чтение с файла
Здраствуйте! Есть такая структура: struct Elem {AnsiString Name; int poinyX; int pointY; }; Elem masElem;

Запись / Чтение из файла
пробовал и TStringStream, и TStringList все равно 1 символ выводит... Сначала я записываю в этот файл хэш сумму sha1 из БД В БД она...

Запись и чтение из файла строковой переменной
Перехожу и Builder6 на XE. исправил кучу ошибок. в одном не могу развобраться. вот пример: одна кнопка пишет файл, другая читает. ...

Чтение/запись определенного количества байт из бинарного файла
Подскажите пожалуста как реализовать на с++ в RAD Studio чтение определенного количества байт из нетекстового файла,а так же запись по...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью 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
Решили писать научную статью с неким РОманом
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru