bool San::FileIOStream::gloWriteFile(const SString &strFilePath, const SStringW &strData, const bool bCover) { if (strFilePath.empty()) { return false; } ios::openmode FileFlag = ios::binary | ios::out; if (bCover) { FileFlag = FileFlag | ios::trunc; } else { FileFlag = FileFlag | ios::ate; } fstream* pFile = new fstream(strFilePath, FileFlag, 0x40); if (pFile == nullptr) { return false; } pFile->write((const char*) strData.c_str(), sizeof(swchar) *strData.size()); pFile->close(); delete pFile; pFile = nullptr; return true; }
SStringW cXMLLoader::_StringTranslate(SStringW strSource) { if (strSource.empty()) { return L""; } uint32 Size = strSource.length() + 1; swchar* pDest = new swchar[Size]; ::gloMemSet(pDest, 0, sizeof(swchar) *Size); const swchar* pSrc = strSource.c_str(); uint32 DestSeek = 0; for (uint32 seek = 0; seek<Size; seek = seek + 1) { if (pSrc[seek] != L'&') { pDest[DestSeek] = pSrc[seek]; } else { uint32 seek_begin = seek; while ((seek<Size) && (pSrc[seek] != L';')) { seek = seek + 1; } if (seek == Size) { delete[] pDest; pDest = nullptr; return L""; } switch (seek - seek_begin - 1) { case 2: if ((pSrc[seek_begin + 1] == L'l') && (pSrc[seek_begin + 2] == L't')) { pDest[DestSeek] = L'<'; } if ((pSrc[seek_begin + 1] == L'g') && (pSrc[seek_begin + 2] == L't')) { pDest[DestSeek] = L'>'; } break; case 3: if ((pSrc[seek_begin + 1] == L'a') && (pSrc[seek_begin + 2] == L'm') && (pSrc[seek_begin + 3] == L'p')) { pDest[DestSeek] = L'&'; } break; case 4: if ((pSrc[seek_begin + 1] == L'a') && (pSrc[seek_begin + 2] == L'p') && (pSrc[seek_begin + 3] == L'o') && (pSrc[seek_begin + 4] == L's')) { pDest[DestSeek] = L'\''; } if ((pSrc[seek_begin + 1] == L'q') && (pSrc[seek_begin + 2] == L'u') && (pSrc[seek_begin + 3] == L'o') && (pSrc[seek_begin + 4] == L't')) { pDest[DestSeek] = L'='; } break; default: delete[] pDest; pDest = nullptr; return L""; } } DestSeek = DestSeek + 1; } SStringW DestString = pDest; delete[] pDest; pDest = nullptr; return DestString; }