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

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

10.09.2012, 16:13. Показов 5449. Ответов 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
33412 / 21522 / 8236
Регистрация: 22.10.2011
Сообщений: 36,922
Записей в блоге: 12
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
33412 / 21522 / 8236
Регистрация: 22.10.2011
Сообщений: 36,922
Записей в блоге: 12
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
Ответ Создать тему
Новые блоги и статьи
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru