Beispiel #1
0
bool KTaskDataFile::SaveData()
{
	KFile	File;
	char	szFileName[128];

	GetFileName(szFileName, sizeof(szFileName));

	bool	bOk = false;
	while (ms_pPersonalRecord || ms_nSystemRecordCount > 0)
	{
		if (!File.Create(szFileName))
			break;
		//==写文件头==
		TASK_FILE_HEADER	Header = { 0 };
		*(int*)(&(Header.cFlag[0])) = TASK_FILE_FLAG;
		if (ms_pPersonalRecord && ms_pPersonalRecord->nLen > 0)
		{
			Header.nPersonalRecordBytes = sizeof(KPersonalRecord) +
				ms_pPersonalRecord->nLen - sizeof(ms_pPersonalRecord->cBuffer);
		}
		Header.nSystemRecordCount = ms_nSystemRecordCount;
		if (File.Write(&Header, sizeof(Header)) != sizeof(Header))
			break;

		//==写个人纪录==
		if (ms_pPersonalRecord)
		{
			if (File.Write(ms_pPersonalRecord, Header.nPersonalRecordBytes) != Header.nPersonalRecordBytes)
				break;
		}

		//==写系统纪录==
		KTaskSystemRecordNode* pCurrent = ms_pSystemRecordList;
		int	i;
		for (i = 0; i < ms_nSystemRecordCount; i++)
		{
			int nSize = sizeof(TASK_SYSTEM_RECORD) + pCurrent->Record.nContentLen -
				sizeof(pCurrent->Record.cBuffer);
			if (File.Write(&pCurrent->Record, nSize) != nSize)
				break;
			pCurrent = pCurrent->pNext;
		}
		if (i >= ms_nSystemRecordCount)
		{
			bOk = true;
		}
		break;
	};

	File.Close();
	if (bOk == false)
	{
		char	szFullName[MAX_PATH];
		g_GetFullPath(szFullName, szFileName);
		DeleteFile(szFullName);
	}
	return bOk;
}