Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.11.2009, 00:03   #1
Vorname
 
Регистрация: 05.11.2009
Сообщений: 7
По умолчанию сохранение/чтение структуры с файла

Код:
struct Wort
{
	int Artikel;
	WideString Wort; 
	bool Reflexiv;
};
Вся проблема с WideString, до этого использовал *char и сейчас не могу переделать программу под Unicode. Кусок начального кода для масивов *char, естественно не раборающий для WideString. Помогите, пожалуйста, переделать или хотя бы напишите где искать решение

Код:
ofstream fs;
     else fs.open("MyFile.dat", ios::out|ios::binary|ios::app);
     struct Wort uu; 
     ZeroMemory(&uu,sizeof(uu));
     bool ack=true;
     if(ack)
     {
        ZeroMemory(&uu,sizeof(uu));
        strcpy(uu.Wort,Edit1->Text.c_str());
        uu.Reflexiv=CheckBox1->Checked;
        fs.write( (char *)&uu,  sizeof(uu));
     }
     fs.close();

Последний раз редактировалось Sazary; 10.11.2009 в 03:29.
Vorname вне форума Ответить с цитированием
Старый 10.11.2009, 00:32   #2
lennon
Заблокирован
 
Регистрация: 18.11.2007
Сообщений: 254
По умолчанию

записывать в файл надо не так. WideString имеет размер 2 байта. при записи fs.write( (char *)&uu, sizeof(uu)); вы получите "берд" , т.к. WideString будет содержать иной адресс в памяти, нежели адресс структуры, которой вы передаете в параметр функции. Записывать в файл (в случайх когда приходиться записывать динамические массивы) нужно так:

Код:
fs.write(&uu.Artikel, sizeof(uu.Artikel));
fs.write( (void*)uu.Wort, wsclen(uu.Wort)*2);
fs.write( &uu.Reflexiv, sizeof(uu.Reflexiv));
читать из файла так же
lennon вне форума Ответить с цитированием
Старый 10.11.2009, 01:34   #3
Vorname
 
Регистрация: 05.11.2009
Сообщений: 7
По умолчанию

fs.write(&uu.Artikel, sizeof(uu.Artikel));
Error: Cannot convert 'int *' to 'const char *'
Error: Type mismath in parameter '_Str' (wantet 'const char *', got 'int *')

fs.write( (void*)uu.Wort, wcslen(uu.Wort)*2);
Error: Type mismath in parameter '__s' (wantet 'const wchar_t *', got 'WideString')
Error: Cannot convert 'WideString' to 'void *'

fs.write( &uu.Reflexiv, sizeof(uu.Reflexiv));
Error: Type mismath in parameter '_Str' (wantet 'const char *', got 'bool *')
Error: Cannot convert 'bool *' to 'const char *'
Vorname вне форума Ответить с цитированием
Старый 10.11.2009, 01:39   #4
lennon
Заблокирован
 
Регистрация: 18.11.2007
Сообщений: 254
По умолчанию

я сейчас так понял что WideString это класс борландовский (вроде как). значит где-то так

Код:
fs.write( (char*)&uu.Artikel, sizeof(uu.Artikel));
fs.write( (void*)uu.Wort.с_str(), uu.Wort.length()*2);
//или fs.write( (char*)uu.Wort.с_str(), uu.Wort.length()*2);
fs.write( (char*)&uu.Reflexiv, sizeof(uu.Reflexiv));
или так (мнге так удобнее, и вообще так более правильнее)
Код:
#include <stdio.h>

FILE * f = fopen("C:\\test.aa","wb");

fwrite(&uu.Artikel, sizeof(uu.Artikel),1,f);
fwrite((void*)uu.Wort.с_str(), uu.Wort.length()*2,1,f);
fwrite(&uu.Reflexiv, sizeof(uu.Reflexiv),1,f);

fclose(f);
Вы так и непоняли ничего? =\ Сообразите сами с приведениями типов если не компилиться

Последний раз редактировалось lennon; 10.11.2009 в 01:49.
lennon вне форума Ответить с цитированием
Старый 10.11.2009, 17:59   #5
Vorname
 
Регистрация: 05.11.2009
Сообщений: 7
По умолчанию

Спасибо и на том.. Код не будет работать для длинных строк. Нужно сохранять саму строку, а сохраняется только путь к ней, который при следующем запуске программы будет указывать на фигню
Vorname вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
сохранение структуры TreeView SergGhost Помощь студентам 6 27.05.2009 18:31
Запись структуры и чтение из файла [MI_nor] Общие вопросы C/C++ 6 08.04.2009 15:52
Сохранение в файл сложной динамической структуры _Инженер_ Общие вопросы Delphi 24 20.10.2008 09:38
сохранение структуры (динамические списки очередей) в файле AlenaZ Помощь студентам 2 09.06.2008 20:14
Чтение структуры файла SDK Помощь студентам 4 23.01.2008 19:30