bool StdFileManager::GetUTF8BOMFileString(const str_type::string &fileName, str_type::string &out) { FileBuffer buffer; if (GetFileBuffer(fileName, buffer)) { // TODO optimize it str_type::stringstream ss; unsigned char *adr = buffer->GetAddress(); for (unsigned long t = 3; t < buffer->GetBufferSize(); t++) { ss << static_cast<char>(adr[t]); } out = ss.str(); return true; } else { return false; } }
bool ZipFileManager::GetFileBuffer(const str_type::string &fileName, FileBuffer &out) { if (!IsLoaded()) return false; str_type::string fixedPath = fileName; FixSlashesForUnix(fixedPath); zip_file *file = zip_fopen(m_archive, fixedPath.c_str(), 0); if (file == NULL) return false; struct zip_stat stat; zip_stat(m_archive, fixedPath.c_str(), 0, &stat); out = FileBuffer(new _FileBuffer<unsigned char>(static_cast<unsigned long>(stat.size))); zip_fread(file, out->GetAddress(), stat.size); zip_fclose(file); return true; }
bool StdFileManager::GetAnsiFileString(const str_type::string &fileName, str_type::string &out) { FileBuffer buffer; if (GetFileBuffer(fileName, buffer)) { // TODO optimize it str_type::stringstream ss; unsigned char *adr = buffer->GetAddress(); for (unsigned long t = 0; t < buffer->GetBufferSize(); t++) { const char c = static_cast<char>(adr[t]); if (c != 0x0D) // remove all carriage return ss << c; } out = ss.str(); return true; } else { return false; } }
bool StdFileManager::GetFileBuffer(const str_type::string &fileName, FileBuffer &out) { #if _MSC_VER >= 1500 FILE *f = 0; _wfopen_s(&f, fileName.c_str(), GS_L("rb")); #else FILE *f = _wfopen(fileName.c_str(), GS_L("rb")); #endif if (!f) { return false; } fseek(f, 0, SEEK_END); const std::size_t len = ftell(f); fseek(f, 0, SEEK_SET); out = FileBuffer(new _FileBuffer<unsigned char>(len)); fread(out->GetAddress(), len, 1, f); fclose(f); return true; }