0 голосов
спросил от в категории MFCVisualC
CString - это объект, а правильный способ записать его в файл - это сериализация. MFC очень хорошо поддерживает сериализацию, на мой взгляд. Взгляните на эту статью CodeProject: #"A serialization primer - Part 1" # [#^ #].

Пожалуйста, войдите или зарегистрируйтесь чтобы ответить на этот вопрос.

0 голосов
ответил от
Напишите длину с помощью CString :: GetLength () , а затем напишите массив символов в CString . Вы можете получить доступ к массиву с нулевым завершением, нажав CString на LPCTSTR .

CString str; int len=str.GetLength()+1; fwrite((const void*)(&len), sizeof(int), 1, fp); // write the length fwrite((const void*)(LPCTSTR)str, sizeof(TCHAR), len, fp);


Примечание: CString :: GetLength () не включает символ NULL в конце, поэтому вам нужно добавить его, если хотите для записи символа NULL.

При чтении прочитайте длину 1-го и затем массив символов. Не читайте больше, чем длина! Поскольку массив имеет нулевое завершение, вы можете просто сделать это.

int len=0; fread((void*)(&len), sizeof(int), 1, fp); // read the length TCHAR* pbuf = new TCHAR[len]; fread((void*)(pbuf), sizeof(TCHAR), len, fp); // read the char array CString str = pbuf; // since pbuf is null terminated delete [] pbuf; pbuf = NULL;


Или вы можете избежать дополнительных выделение памяти путем вызова CString :: GetBuffer .

int len=0; fread((void*)(&len), sizeof(int), 1, fp); // read the length CString str; LPTSTR* pbuf = str.GetBuffer(len); fread((void*)(pbuf), sizeof(TCHAR), len, fp); // read the char array str.ReleaseBuffer();
0 голосов
ответил от
Это потому, что fwrite не понимает структуру CString и просто записывает объект и его указатели. Фактические данные, принадлежащие объекту, будут оставлены в памяти где-то и не будут записаны в файл. Если вы хотите сохранить и восстановить объекты MFC, вы должны использовать CArchive .

Категории

Добро пожаловать на сайт DraftingCode Q&A, где вы можете задавать вопросы и получать ответы от других членов сообщества.

Похожие вопросы

0 голосов
0 ответов
0 голосов
0 ответов
0 голосов
0 ответов
спросил 20 Июнь, 17 от jochen arndt в категории MFCVisualC
0 голосов
0 ответов
спросил 31 Янв, 13 от merano в категории MFCVisualC
...