Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> fwrite (struct->wchar_t), Запись в файл структуры с полями wchar_t 
V
    Опции темы
CHITER
  Дата 30.4.2010, 01:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 14.7.2007
Где: Пенза

Репутация: нет
Всего: нет



Код

struct DB_File {
    wchar_t DCity[20];
    wchar_t DCountry[20];
    wchar_t DCount[10];
    wchar_t DSize[10];
    wchar_t DYear[5];
    DB_File *next;
} File_Struct, *start, *end;


void CDialogAdd::OnBnClickedButton1() {
    CreateDirectory(L"DB_Files", NULL);
    FILE* myf;
    switch (ID_CONT) {
        case 0:
            myf = fopen("DB_Files\\Eurasia.dat", "a+");
            break;
        case 1:
            myf = _wfopen(L"DB_Files\\Asia.dat", L"a+");
            break;
        case 2:
            myf = _wfopen(L"DB_Files\\Africa.dat", L"a+");
            break;
        case 3:
            myf = _wfopen(L"DB_Files\\Australia.dat", L"a+");
            break;
        case 4:
            myf = _wfopen(L"DB_Files\\South_America.dat", L"a+");
            break;
        case 5:
            myf = _wfopen(L"DB_Files\\North_America.dat", L"a+");
            break;
    }
    int t = 0;
    ECity.GetWindowTextW(File_Struct.DCity, 20);
    ECountry.GetWindowTextW(File_Struct.DCountry, 20);
    ECount.GetWindowTextW(File_Struct.DCount, 10);
    ESize.GetWindowTextW(File_Struct.DSize, 10);
    EYear.GetWindowTextW(File_Struct.DYear, 5);
    t = fwrite(&File_Struct, sizeof(DB_File), 1, myf);
    fclose(myf);
    OnOK();
}

void CppcDlg::OnCbnSelendokCont()
{
    DB_File *curr = NULL;
    FILE* myf;
    LVITEM lvi;
    int i = 1;
    WCHAR buf[100];
    m_ListCtrl.DeleteAllItems();
    CreateDirectory(L"DB_Files", NULL);
    switch (MainCont.GetCurSel()) {
        case 0:
            if ((myf = _wfopen(L"DB_Files\\Eurasia.dat", L"r")) == NULL) return;
            break;
        case 1:
            if ((myf = _wfopen(L"DB_Files\\Asia.dat", L"r")) == NULL) return;
            break;
        case 2:
            if ((myf = _wfopen(L"DB_Files\\Africa.dat", L"r")) == NULL) return;
            break;
        case 3:
            if ((myf = _wfopen(L"DB_Files\\Australia.dat", L"r")) == NULL) return;
            break;
        case 4:
            if ((myf = _wfopen(L"DB_Files\\South_America.dat", L"r")) == NULL) return;
            break;
        case 5:
            if ((myf = _wfopen(L"DB_Files\\North_America.dat", L"r")) == NULL) return;
            break;
    }
    int t = 0;
    while (!feof(myf)) {
        t = fread(&File_Struct, sizeof(DB_File), 1, myf);
        curr = new DB_File();
        lvi.mask = LVIF_TEXT;
        lvi.iItem = i-1;
        lvi.iSubItem = 0;
        _itow(i, buf, 10);
        lvi.pszText = buf;
        m_ListCtrl.InsertItem(&lvi);
        lvi.iSubItem = 1;
        lvi.pszText = File_Struct.DCity;
        m_ListCtrl.SetItem(&lvi);
        lvi.iSubItem = 2;
        lvi.pszText = File_Struct.DCountry;
        m_ListCtrl.SetItem(&lvi);
        lvi.iSubItem = 3;
        lvi.pszText = File_Struct.DCount;
        m_ListCtrl.SetItem(&lvi);
        lvi.iSubItem = 4;
        lvi.pszText = File_Struct.DSize;
        m_ListCtrl.SetItem(&lvi);
        lvi.iSubItem = 5;
        lvi.pszText = File_Struct.DYear;
        m_ListCtrl.SetItem(&lvi);
        i++;
        wcscpy(curr->DCity, File_Struct.DCity);
        wcscpy(curr->DCount, File_Struct.DCount);
        wcscpy(curr->DCountry, File_Struct.DCountry);
        wcscpy(curr->DSize, File_Struct.DSize);
        wcscpy(curr->DYear, File_Struct.DYear);
        if (start == NULL) {
            start = curr;
            end = curr;
            end->next = NULL;
        } else {
            end->next = curr;
            end = curr;
            end->next = NULL;
        }
    }
    fclose(myf);
}


Суть в том, что при дебаге просматриваю всю структуру, перед тем как выполнится fwrite, все ровно, все нормально.
При выводе первый блок из файла ровно выходит, но дальше, все либо пусто, либо какими-то клочками от записанных строк.
В чем может крыться проблема ?

Присоединённый файл ( Кол-во скачиваний: 11 )
Присоединённый файл  ppc.png 43,77 Kb
PM MAIL WWW ICQ   Вверх
KOHCEPBATOP
Дата 30.4.2010, 08:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 44
Регистрация: 21.4.2010

Репутация: нет
Всего: 1



CHITER, при работе с функциями fread и fwrite файл нужно открывать в бинарном режиме:
myf = fopen("DB_Files\\Eurasia.dat", "a+b"); и myf = _wfopen(L"DB_Files\\Eurasia.dat", L"rb")



P.S.
Вместо switch обычно используются другие конструкции. Например массивы:
Код

static const wchar_t * FileNameList[] = {
    L"DB_Files\\Eurasia.dat",
    L"DB_Files\\Asia.dat",
    L"DB_Files\\Africa.dat",
    L"DB_Files\\Australia.dat",
    L"DB_Files\\South_America.dat",
    L"DB_Files\\North_America.dat"
 };
 FILE* myf;
 int i = MainCont.GetCurSel();
 if( (i < 0) || (i >= sizeof(FileNameList)/sizeof(FileNameList[0])) ) return;
 myf = _wfopen( FileNameList[i], L"rb" );
 if( myf == NULL ) return;

PM MAIL   Вверх
CHITER
Дата 30.4.2010, 22:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 14.7.2007
Где: Пенза

Репутация: нет
Всего: нет



решено...

Это сообщение отредактировал(а) CHITER - 1.5.2010, 01:44
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0979 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.