Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Visual C++/MFC/WTL > Запись массива в файл


Автор: 13dreams 2.8.2010, 13:28
Подскажите как записать\считать двухмерный массив типа int  в файл? 


Автор: Earnest 3.8.2010, 09:11
Например, CFile::Write, если MFC пользоваться. Если размеры массива не постоянны, впереди пишем два числа - размеры массива.

Автор: 13dreams 3.8.2010, 17:56
спасибо, разобрался

а как быть с массивом CString? я пытался аналогично массиву типа int

Код

CFile theFile;
CString F1name(_T("myfile.txt"));
BOOL bOpenOK;
CFileStatus status;
if( CFile::GetStatus( F1name, status ) )
{    // Открываем файл не создавая его
    bOpenOK = theFile.Open( F1name, 
        CFile::modeWrite ); }
else{    // Создаём файл и открываем его
    bOpenOK = theFile.Open( (LPCTSTR)F1name, 
        CFile::modeCreate | CFile::modeWrite);}

theFile.Write((void*) &txt, sizeof(txt));
theFile.Close();


txt - массив типа СString

Чтение:
Код

theFile.Open(F1name,CFile::modeRead);
theFile.Read((void*)&txt,sizeof(txt));
theFile.Close();

Автор: Earnest 5.8.2010, 07:34
13dreams, ты бы напрягся и подумал, что такое CString. А это всего лишь указатель на выделенную под строку память. А ты пытаешься записать его как POD. Т.е. пишешь текущие значения указателей. И что ты надеешься получить после чтения? Для строк есть свои функции (типа WriteString), причем сразу массив записать нельзя, только по одной. Сначала пишешь число строк в массиве, потом строки поштучно. Читаешь симметрично.
Можно еще пользоваться MFC-шной сериализацией, через CArchive. У MFC-шных контейнеров есть функция Serialize, и можно определить свой вариант SerializeElements для сложных структур (которые не POD и не строки - для строк есть реализация). 

Автор: 13dreams 5.8.2010, 10:22
Всё получилось, спасибо!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)