Ejemplo n.º 1
0
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);
}
Ejemplo n.º 2
0
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;
	}
}
Ejemplo n.º 3
0
__int64 MultiFileReader::getFilePointer()
{
	__int64 fileStart, fileEnd, fileLength;
	GetFileSize(&fileStart, &fileLength);
	fileEnd = fileLength + fileStart;
	return (__int64)(GetFilePointer() - fileStart);
}
Ejemplo n.º 4
0
HRESULT CBPackage::Open()
{
	if (m_File) return S_OK;
	else
	{
		m_File = GetFilePointer();
		return m_File ? S_OK : E_FAIL;
	}
}
Ejemplo n.º 5
0
int64_t MultiFileReader::getFilePointer()
{
  int64_t fileStart, fileEnd, fileLength;

  GetFileSize(&fileStart, &fileLength);
  fileEnd = fileLength + fileStart;

  return (int64_t)(GetFilePointer() - fileStart);
}
Ejemplo n.º 6
0
//
// 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;
}
Ejemplo n.º 7
0
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;
}
Ejemplo n.º 8
0
//Записывает 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);
}
Ejemplo n.º 9
0
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;
}
Ejemplo n.º 10
0
//Записывает в файл все данные о регионе 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("Ошибка при сохранении региона. Файл поврежден: неверная запись о смещении следующего региона.");
}
Ejemplo n.º 11
0
/*
	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;
}
Ejemplo n.º 12
0
/*
	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;
}
Ejemplo n.º 13
0
/*
	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;
}
Ejemplo n.º 14
0
//
// 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;

}
Ejemplo n.º 15
0
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;
}
Ejemplo n.º 16
0
//Записывает входные параметры региона 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(&currentPos, 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);
}
Ejemplo n.º 17
0
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;
}
Ejemplo n.º 18
0
void FileReader::setBufferPointer()
{
	m_llBufferPointer = GetFilePointer();	
}
Ejemplo n.º 19
0
__int64 FileReader::getFilePointer()
{
	return GetFilePointer();
}
Ejemplo n.º 20
0
bool CFile::WriteFilePointer ( unsigned char *cData, long len )
{
	return WriteToFile ( GetFilePointer(), cData, len );
}