unsigned int CPSLOCAL_Tell(CPs_InStream* pStream) { CPs_InStream_File* pContext = (CPs_InStream_File*)pStream->m_pModuleCookie; CP_CHECKOBJECT(pContext); return GetFilePointer(pContext->m_hFile); }
void CFile::UnPCKFile () { unsigned char *data = NULL; size_t datasize = 0; if ( CheckValidFilePointer() ) { FILE *id = fopen ( GetFilePointer().c_str(), "rb+" ); if ( id ) { fseek ( id, 0, SEEK_END ); datasize = ftell ( id ); rewind ( id ); data = new unsigned char[datasize]; fread ( data, sizeof(unsigned char), datasize, id ); fclose ( id ); } } if ( !data ) { datasize = m_lDataSize; data = new unsigned char[datasize]; memcpy ( data, m_sData, datasize ); } if ( data ) { size_t len = 0; m_sData = UnPCKData ( data, datasize, &len ); delete data; m_lDataSize = len; } }
__int64 MultiFileReader::getFilePointer() { __int64 fileStart, fileEnd, fileLength; GetFileSize(&fileStart, &fileLength); fileEnd = fileLength + fileStart; return (__int64)(GetFilePointer() - fileStart); }
HRESULT CBPackage::Open() { if (m_File) return S_OK; else { m_File = GetFilePointer(); return m_File ? S_OK : E_FAIL; } }
int64_t MultiFileReader::getFilePointer() { int64_t fileStart, fileEnd, fileLength; GetFileSize(&fileStart, &fileLength); fileEnd = fileLength + fileStart; return (int64_t)(GetFilePointer() - fileStart); }
// // OpenFile // HRESULT FileWriter::OpenFile() { // Is the file already opened if (m_hFile != INVALID_HANDLE_VALUE) { return NOERROR; } // Has a filename been set yet if (m_pFileName == NULL) { return ERROR_INVALID_NAME; } // See the the file is being read. m_hFile = CreateFileW(m_pFileName, // The filename (DWORD) GENERIC_WRITE, // File access (DWORD) NULL, // Share access NULL, // Security (DWORD) OPEN_ALWAYS, // Open flags (DWORD) 0, // More flags NULL); // Template if (m_hFile == INVALID_HANDLE_VALUE) { DWORD dwErr = GetLastError(); if (dwErr == ERROR_SHARING_VIOLATION) { return HRESULT_FROM_WIN32(dwErr); } return HRESULT_FROM_WIN32(dwErr); } CloseHandle(m_hFile); // Try to open the file m_hFile = CreateFileW(m_pFileName, // The filename (DWORD) GENERIC_WRITE, // File access (DWORD) FILE_SHARE_READ, // Share access NULL, // Security (DWORD) OPEN_ALWAYS, // Open flags // (DWORD) FILE_FLAG_RANDOM_ACCESS, // (DWORD) FILE_FLAG_WRITE_THROUGH, // More flags (DWORD) 0, // More flags NULL); // Template if (m_hFile == INVALID_HANDLE_VALUE) { DWORD dwErr = GetLastError(); return HRESULT_FROM_WIN32(dwErr); } SetFilePointer(0, FILE_END); m_chunkReserveFileSize = GetFilePointer(); SetFilePointer(0, FILE_BEGIN); return S_OK; }
int CFile::ReadScriptVersion () { if ( (m_iFileType != FILETYPE_SCRIPT) && (m_iFileType != FILETYPE_UNINSTALL) ) return 0; // check file pointer String file = GetFilePointer(); // check file extenstion if ( (file.GetToken ( file.NumToken('.'), '.' ).ToLower() == "pck" ) && (CheckPCK()) ) { size_t size = 0; unsigned char *data = UnPCKFile ( &size ); if ( (data) && (size) ) m_iVersion = ::ReadScriptVersionFromData ( data, size ); } else if ( (m_sData) && (m_iDataCompression == SPKCOMPRESS_NONE) ) m_iVersion = ::ReadScriptVersionFromData ( m_sData, m_lDataSize ); else { FILE *id = fopen ( file.c_str(), "rb+" ); if ( id ) { fclose ( id ); std::string line; std::ifstream myfile ( file.c_str() ); if ( myfile.is_open() ) { bool inscript = false; while (! myfile.eof() ) { std::getline ( myfile, line ); while ( line[0] == ' ' ) line.erase ( 0, 1 ); String sLine = line; if ( !inscript ) { if ( sLine.GetToken ( 1, '>' ) == "<script" ) inscript = true; } else { if ( sLine.GetToken ( 1, '>' ) == "<version" ) { m_iVersion = sLine.GetToken ( 2, '>' ).GetToken ( 1, '<' ).ToInt(); break; } } } myfile.close(); } } } return m_iVersion; }
//Записывает N-ую точку data региона pReg void XpsProjectFile::SaveDataOutPointToFile(CRegion* pReg, int N, DATA_OUT* data) { if (!pReg) throw EXCEPTION("Writing data point to project file: Pointer to region is NULL"); FullResaveIfVersionConflicts(); auto fp = GetFilePointer(); fseek(fp, (pReg->m_ptrInFile + sizeof(DATA_IN) + 2 * sizeof(time_t) + 2 * sizeof(int) + (N * sizeof(DATA_OUT))), SEEK_SET); fwrite(data, sizeof(DATA_OUT), 1, fp); fflush(fp); }
bool CFile::CheckValidFilePointer () { String filename = GetFilePointer(); if ( filename.Empty() ) return false; FILE *id = fopen ( filename.c_str(), "rb+" ); if ( !id ) return false; fclose ( id ); return true; }
//Записывает в файл все данные о регионе pReg void XpsProjectFile::SaveXpsFullRegionDataToFile(CRegion* pReg) { SaveDataInToFile(pReg); auto fp = GetFilePointer(); fwrite(pReg->m_pDataOut, sizeof(DATA_OUT), pReg->m_NDataOut, fp); fflush(fp); int currentPos = ftell(fp); auto nextReg = CRegion::GetNext(pReg); if (!nextReg || nextReg->m_ptrInFile == currentPos + sizeof(int)) return; throw EXCEPTION("Ошибка при сохранении региона. Файл поврежден: неверная запись о смещении следующего региона."); }
/* Func: ReadFileSize() Return: Returns the file size read Desc: Opens the file and seeks to the end */ long CFile::ReadFileSize () { FILE *id = fopen ( GetFilePointer().c_str(), "rb" ); if ( id ) { fseek ( id, 0, SEEK_END ); m_lSize = ftell ( id ); fclose ( id ); } m_lUncomprDataSize = m_lSize; return m_lSize; }
/* Func: ReadLastModifed() Desc: Reads the last modified time of the file and returns Uses seperate rountines for Windows and Linux */ time_t CFile::ReadLastModified () { String file = GetFilePointer(); if ( file.Empty() ) return m_tTime; #ifndef _WIN32 struct stat attrib; // create a file attribute structure stat ( file.c_str(), &attrib); m_tTime = attrib.st_mtime; #else #endif return m_tTime; }
/* Func: ReadFromFile Return: Boolean - Returns true if read was successfull Desc: Reads data from file pointer into data stream As its read from a file, there will be no compression, so its set to None */ bool CFile::ReadFromFile () { FILE *id = fopen ( GetFilePointer().c_str(), "rb" ); if ( !id ) { m_iLastError = SPKERR_FILEOPEN; return false; } if ( !m_lSize ) { fseek ( id, 0, SEEK_END ); m_lSize = ftell ( id ); rewind ( id ); } m_iDataCompression = SPKCOMPRESS_NONE; m_lDataSize = m_lUncomprDataSize = m_lSize; DeleteData (); m_sData = new unsigned char[m_lSize]; if ( !m_sData ) { fclose ( id ); m_iLastError = SPKERR_MALLOC; return false; } fread ( m_sData, sizeof(unsigned char), m_lSize, id ); if ( ferror(id) ) { m_iLastError = SPKERR_FILEREAD; DeleteData (); m_lDataSize = 0; fclose ( id ); return false; } m_iLastError = SPKERR_NONE; m_bLoaded = true; fclose ( id ); return true; }
// // CloseFile // HRESULT FileWriter::CloseFile() { if (m_hFile == INVALID_HANDLE_VALUE) { return S_OK; } if (m_bChunkReserve) { __int64 currentPosition = GetFilePointer(); SetFilePointer(currentPosition, FILE_BEGIN); SetEndOfFile(m_hFile); } CloseHandle(m_hFile); m_hFile = INVALID_HANDLE_VALUE; // Invalidate the file return S_OK; }
bool CFile::CheckPCK () { if ( (m_sData) && (m_lDataSize) && (m_iDataCompression == SPKCOMPRESS_NONE) ) return IsDataPCK ( m_sData, m_lDataSize ); String filename = GetFilePointer(); if ( !filename.Empty() ) { FILE *id = fopen ( filename.c_str(), "rb+" ); if ( id ) { unsigned char data[3]; fread ( data, sizeof(unsigned char), 3, id ); fclose ( id ); return IsDataPCK ( data, 3 ); } } return false; }
//Записывает входные параметры региона pReg, время начала и конца, число снятых в нем точек и общее число точек void XpsProjectFile::SaveDataInToFile(CRegion* pReg) { if (!pReg) throw EXCEPTION("Writing data point to project file: Pointer to region is NULL"); FullResaveIfVersionConflicts(); auto fp = GetFilePointer(); fseek(fp, pReg->m_ptrInFile - sizeof(UINT), SEEK_SET); int currentPos; fread(¤tPos, sizeof(UINT), 1, fp); if (currentPos != pReg->m_ptrInFile) throw EXCEPTION("Файл поврежден: неверная запись о смещении хранения настроек региона"); fseek(fp, pReg->m_ptrInFile, SEEK_SET); auto dataIn = DATA_IN_V3(pReg->m_DataIn); fwrite(&dataIn, sizeof(dataIn), 1, fp); fwrite(&pReg->m_BeginTime, sizeof(time_t), 1, fp); fwrite(&pReg->m_EndTime, sizeof(time_t), 1, fp); fwrite(&pReg->m_NDataOutCurr, sizeof(int), 1, fp); fwrite(&pReg->m_NDataOut, sizeof(int), 1, fp); std::vector<byte> reserved; reserved.assign(16, 0); fwrite(reserved.data(), sizeof(byte), reserved.size(), fp); fflush(fp); }
HRESULT FileWriter::Write(PBYTE pbData, ULONG lDataLength) { HRESULT hr; // If the file has already been closed, don't continue if (m_hFile == INVALID_HANDLE_VALUE) return S_FALSE; if (m_bChunkReserve) { __int64 currentPosition = GetFilePointer(); if ((currentPosition + lDataLength > m_chunkReserveFileSize) && (m_chunkReserveFileSize < m_maxFileSize)) { while (currentPosition + lDataLength > m_chunkReserveFileSize) m_chunkReserveFileSize += m_chunkReserveSize; if (m_chunkReserveFileSize > m_maxFileSize) m_chunkReserveFileSize = m_maxFileSize; SetFilePointer(m_chunkReserveFileSize, FILE_BEGIN); SetEndOfFile(m_hFile); SetFilePointer(currentPosition, FILE_BEGIN); } } DWORD written = 0; hr = WriteFile(m_hFile, (PVOID)pbData, (DWORD)lDataLength, &written, NULL); if (FAILED(hr)) return hr; if (written < (ULONG)lDataLength) return S_FALSE; return S_OK; }
void FileReader::setBufferPointer() { m_llBufferPointer = GetFilePointer(); }
__int64 FileReader::getFilePointer() { return GetFilePointer(); }
bool CFile::WriteFilePointer ( unsigned char *cData, long len ) { return WriteToFile ( GetFilePointer(), cData, len ); }