예제 #1
0
파일: File.cpp 프로젝트: nightstyles/focp
int32 CFile::Write(CMemoryStream& oStream, int32 nWriteSize)
{
	if(nWriteSize <= 0)
		return 0;
	uint32 nRest = oStream.GetSize() - oStream.GetPosition();
	if(nRest < (uint32)nWriteSize)
		nWriteSize = nRest;
	int32 nRet, nOldCopySize = nWriteSize;
	while(nWriteSize)
	{
		uint32 nBlockSize;
		char* pBuf = oStream.GetBuf(nBlockSize);
		if(nBlockSize > (uint32)nWriteSize)
			nBlockSize = nWriteSize;
		nRet = Write(pBuf, nBlockSize);
		if(nRet < 0)
		{
			if(nWriteSize == nOldCopySize)
				return nRet;
			break;
		}
		if(nRet == 0)
			break;
		nWriteSize -= nRet;
		oStream.Seek(nRet);
	}
	return nOldCopySize - nWriteSize;
}
예제 #2
0
파일: File.cpp 프로젝트: nightstyles/focp
int32 CFile::Read(CMemoryStream& oStream, int32 nReadSize, uint32 nTimeOut)
{
	if(nReadSize <= 0)
		return 0;
	if(oStream.GetSize() == oStream.GetPosition())
	{
		if(!oStream.ExtendSize(nReadSize))
			return 0;
	}
	uint32 nBlockSize;
	char* pBuf = oStream.GetBuf(nBlockSize);
	if(nBlockSize > (uint32)nReadSize)
		nBlockSize = nReadSize;
	int32 nRet = Read(pBuf, nBlockSize, nTimeOut);//???????
	if(nRet > 0)
		oStream.Seek(nRet);
	return nRet;
}