Форум программистов, компьютерный форум CyberForum.ru

Запись/чтение структур (файлы) + разница между FILE * и <fstream> - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Список С++ http://www.cyberforum.ru/cpp-beginners/thread929040.html
Доброго времени суток всем. Возник вопрос, как его решить не знаю. Те кто знаком c python знают, что там есть такая штука как "list". В нем можно хранить объекты любых типов. Вставл вопрос, а как такое на С++ реализуется а еще лучше, возможно ли? template<typename T> class List { private: T data; List<T>* next; public: //и дальше по тексту }
C++ невозможно преобразовать параметр 1 из "int" в "int *&" #include <iostream> using namespace std; void Func1(int *n) { cout << *n << " = " << *n << endl; } void Func2(int &n) { http://www.cyberforum.ru/cpp-beginners/thread929023.html
C++ DLL ошибка LNK2019
Добрый день! Рассматриваю пример, Создание и использование Dll, на MSDN. Делаю все, что требуется, создал dll, создал проект, указал нужные доп. пути к файлам, но приложение выдает ошибку: 1>MyExecRefcDll.obj : error LNK2019: ссылка на неразрешенный внешний символ "public: static double __cdecl MathFuncs::MyMathFuncs::Divide(double,double)" (?Divide@MyMathFuncs@MathFuncs@@SANNN@Z) в...
C++ Экспорт из 3d max, наложение текстуры
Здравствуйте. Проблема с наложением текстуры. С помощью библиотеки lib3ds.lib импортирую 3ds файл в программу (простой куб), накладываю текстуру. Текстура независимо от размера (64х64 или 512х512) накладывается маленькими повторяющимися квадратами. Когда беру 3ds файл из примера (был вместе с библиотекой) текстура накладывается нормально. Когда делаю в 3d max сцену из двух объектов, один мой,...
C++ Сохранить скрин шот заданной области экрана http://www.cyberforum.ru/cpp-beginners/thread928959.html
Добрый день, помогите пожалуйста написать программу, которая делает скриншот заданной области экрана и сохраняет в файл. Функционал минимальный, координаты прописаны жестко, программа консольная, файл перезаписывается. Спасибо.
C++ Как считать текст с файла ? Как считать текст с файла (например .txt) а потом в другой пустой файл записать текст с первого документа? подробнее

Показать сообщение отдельно
Kukstyler
COBOL Expert
 Аватар для Kukstyler
357 / 139 / 7
Регистрация: 02.04.2009
Сообщений: 669
26.07.2013, 13:02     Запись/чтение структур (файлы) + разница между FILE * и <fstream>
Всем привет. Порыскал по форуму, погуглил... Решения есть, но они не ясны (что, почему да как) и не все работают. Однако, я так и не нашёл конкретных и ясных объяснений по-этому поводу. И т.к. в С++ я пока конкретный чайник (и видать ещё надолго), буду очень признателен если кто-либо сможет объяснить Коболисту всю эту канитель на пальцах...

И так, к делу! Первое, что я так и не понял: возможно ли записать структуру в файл напрямик (прямо структуру а не её поля по-отдельности)?

На пример что-либо в стиле:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
typedef struct _REG
{
 UnicodeString TEXTO;
 int           NUM;
} FR;
 
FR r;
 
FILE* f = fopen("fichero.txt", "wb");
 
r.TEXTO = L"устанавливают характер использования файлов";
r.NUM = 1985;
 
fwrite(r, sizeof(r), 1, f);
 
fclose(f);
В данном случае компилятору не нравится r и он выдаёт ошибку, если не ошибаюсь "parse error".

Нашёл такой вариант:
C++
1
fwrite(&r, sizeof(r), 1, f);
В этом случае всё работает, однако & - это ведь pointer на физ. адрес! Таким образом, в файл записывается адрес структуры, и по этому адресу данные могут быть считаны только до закрытия приложения (если закрыть и вновь открыть прогу, по данному адресу естественно этих данных уже нет и прога выдаёт ошибку).

Нашёл ещё один вариант:

C++
1
fprintf(f,"%s%d",r.TEXTO,r.NUM);
На запить он работает, и судя по всему запись производится правильно. Однако при чтении файла этим-же способом:

C++
1
2
3
4
5
6
7
FILE* f = fopen("fichero.txt", "rb");
 
fscanf(f,"%s%d",r.TEXTO,r.NUM);
 
Edit1->Text=r.TEXTO+IntToStr(r.NUM);
 
fclose(f);
Bыдаётся ошибка "Access violation. Write of address 0x00000000"...

Помимо всего этого, я так и нигде не нашёл разницу использования библиотеки <fstream> и объекта FILE. Предполагаю (хоть и может несу чушь), что FILE - это чисто Си, а <fstream> - это уже "тунинг" в С++. Правильно ли это?
И потом, когда используется один вариант а когда второй? Есть ли разница в performance между этими 2-мя способами работы с файлами? Или методы из <fstream> базируется (наследуют) всё те-же методы используемые с FILE?

Заранее спасибо за ответы.


П.С. Начав изучение С++ (совсем недавно) я на собственной шкуре понял, чем и насколько COBOL на самом деле лучше в работе со строками, массивами, структурами и файлами...
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 01:59. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru