Click here to Skip to main content
16,008,183 members
Home / Discussions / C / C++ / MFC
   

C / C++ / MFC

 
QuestionProblem Reading/Writing text/dat files Pin
Trupti Mehta16-Jun-08 21:52
Trupti Mehta16-Jun-08 21:52 
AnswerRe: Problem Reading/Writing text/dat files Pin
Mark Salsbery17-Jun-08 6:24
Mark Salsbery17-Jun-08 6:24 
GeneralRe: Problem Reading/Writing text/dat files Pin
Trupti Mehta17-Jun-08 7:52
Trupti Mehta17-Jun-08 7:52 
GeneralRe: Problem Reading/Writing text/dat files Pin
Mark Salsbery17-Jun-08 8:16
Mark Salsbery17-Jun-08 8:16 
GeneralRe: Problem Reading/Writing text/dat files Pin
Trupti Mehta17-Jun-08 22:28
Trupti Mehta17-Jun-08 22:28 
GeneralRe: Problem Reading/Writing text/dat files Pin
Mark Salsbery18-Jun-08 6:13
Mark Salsbery18-Jun-08 6:13 
GeneralRe: Problem Reading/Writing text/dat files Pin
Trupti Mehta18-Jun-08 22:57
Trupti Mehta18-Jun-08 22:57 
GeneralRe: Problem Reading/Writing text/dat files Pin
Mark Salsbery18-Jun-08 9:12
Mark Salsbery18-Jun-08 9:12 
Trupti Mehta wrote:
for (POSITION pos = opdtMap.GetStartPosition(); pos != NULL [Wink] {
int key;
OperatorDetails od;
opdtMap.GetNextAssoc(pos, key, od );
// ar.WriteObject(&od);
ar << &od;
}


I tested this and traced into the MFC code to see why only one
object was getting written to the archive.

There's an "optimization" in there - if the CObject* serialized with
WriteObject() (or ar << &od;, which calls WriteObject()) matches a
CObject* that's already been written to the archive, then just a reference to
the original serialized object is written to the archive.

Since the above code is passing the same pointer (a pointer to the same
object) each time, the first object found gets serialized, then only references
to that first object are written.

FWIW, here's an example of the correct way to serialize/unserialize a CMap:
typedef CMap<int, int, OperatorDetails, OperatorDetails&> OperatorDetailsMap;

template <> void AFXAPI SerializeElements <OperatorDetails> (CArchive &ar, OperatorDetails *pOperatorDetails, INT_PTR nCount)
{
	for (int i = 0; i < nCount; i++, pOperatorDetails++)
	{
		pOperatorDetails->Serialize(ar);
	}
}

void WriteArchive()
{
	OperatorDetailsMap newOperMap;   
	newOperMap.SetAt(1, OperatorDetails(1, _T("One")));   
	newOperMap.SetAt(2, OperatorDetails(2, _T("Two")));   

	CFile myfile(_T("e:\\archive_test.txt"), CFile::modeCreate | CFile::modeWrite | CFile::shareDenyWrite);
	CArchive ar(&myfile, CArchive::store);   

	newOperMap.Serialize(ar);

	ar.Close();
	myfile.Close();
}

void ReadArchive()
{
	OperatorDetailsMap newOperMap;

	CFile myfile(_T("e:\\archive_test.txt"), CFile::modeRead | CFile::shareDenyNone);
	CArchive ar(&myfile, CArchive::load);   

	newOperMap.Serialize(ar);

	ar.Close();
	myfile.Close();
}


Mark Salsbery
Microsoft MVP - Visual C++

Java | [Coffee]

GeneralRe: Problem Reading/Writing text/dat files Pin
Trupti Mehta18-Jun-08 22:44
Trupti Mehta18-Jun-08 22:44 
GeneralRe: Problem Reading/Writing text/dat files Pin
Trupti Mehta19-Jun-08 0:15
Trupti Mehta19-Jun-08 0:15 
GeneralRe: Problem Reading/Writing text/dat files Pin
Mark Salsbery19-Jun-08 6:04
Mark Salsbery19-Jun-08 6:04 
GeneralRe: Problem Reading/Writing text/dat files Pin
Trupti Mehta19-Jun-08 22:38
Trupti Mehta19-Jun-08 22:38 
AnswerRe: Problem Reading/Writing text/dat files Pin
ThatsAlok17-Jun-08 16:45
ThatsAlok17-Jun-08 16:45 
GeneralRe: Problem Reading/Writing text/dat files Pin
Trupti Mehta17-Jun-08 22:33
Trupti Mehta17-Jun-08 22:33 
GeneralRe: Problem Reading/Writing text/dat files Pin
ThatsAlok18-Jun-08 5:15
ThatsAlok18-Jun-08 5:15 
GeneralRe: Problem Reading/Writing text/dat files Pin
Trupti Mehta18-Jun-08 22:48
Trupti Mehta18-Jun-08 22:48 
Questiona error about c++ read xml Pin
huke198716-Jun-08 21:31
huke198716-Jun-08 21:31 
GeneralRe: a error about c++ read xml Pin
huke198716-Jun-08 22:01
huke198716-Jun-08 22:01 
GeneralRe: a error about c++ read xml Pin
ThatsAlok17-Jun-08 20:55
ThatsAlok17-Jun-08 20:55 
AnswerRe: a error about c++ read xml Pin
Naveen16-Jun-08 22:37
Naveen16-Jun-08 22:37 
GeneralRe: a error about c++ read xml Pin
huke198716-Jun-08 22:58
huke198716-Jun-08 22:58 
GeneralRe: a error about c++ read xml Pin
Naveen16-Jun-08 23:11
Naveen16-Jun-08 23:11 
GeneralRe: a error about c++ read xml Pin
huke198716-Jun-08 23:33
huke198716-Jun-08 23:33 
GeneralRe: a error about c++ read xml Pin
Naveen16-Jun-08 23:37
Naveen16-Jun-08 23:37 
GeneralRe: a error about c++ read xml Pin
ThatsAlok17-Jun-08 2:06
ThatsAlok17-Jun-08 2:06 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.