亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? spfile.cpp

?? 股票軟件
?? CPP
字號:
/*
	Cross Platform Core Code.

	Copyright(R) 2001-2002 Balang Software.
	All rights reserved.

	Using:
		class	CSPFile;
*/

#include	"StdAfx.h"
#include	"SpFile.h"

#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

#ifdef	_DEBUG
#define	new	DEBUG_NEW
#endif


//////////////////////////////////////////////////////////////////////
//	CSPFile
CSPFile::CSPFile()
{
	m_hFile = (UINT) hFileNull;
	m_bCloseOnDelete = FALSE;
}

CSPFile::~CSPFile()
{
	if (m_hFile != (UINT)hFileNull && m_bCloseOnDelete)
		Close();
}

BOOL CSPFile::Open(LPCTSTR lpszFileName, UINT nOpenFlags)
{
	// if already opened, return FALSE.
	if( (UINT)hFileNull != m_hFile )
	{
		SP_TRACE0( "hFileNull != m_hFile" );
		SetLastError( errCSPFile_OpenFile );
		return	FALSE;
	}

	SP_ASSERT_VALID(this);
	SP_ASSERT(SP_IsValidString(lpszFileName));
	SP_ASSERT((nOpenFlags & typeText) == 0);   // text mode not supported

	// CFile objects are always binary and CreateFile does not need flag
	nOpenFlags &= ~(UINT)typeBinary;

	m_bCloseOnDelete = FALSE;
	m_hFile = (UINT)hFileNull;

	SP_ASSERT((modeRead|modeWrite|modeReadWrite) == 3);
	int	nAccess = 0;
	switch (nOpenFlags & 3)
	{
	case modeRead:
		nAccess = O_RDONLY;
		break;
	case modeWrite:
		nAccess = O_WRONLY;
		break;
	case modeReadWrite:
		nAccess = O_RDWR;
		break;
	default:
		SP_ASSERT(FALSE);  // invalid access mode
	}

	// no share mode
	SP_ASSERT( (nOpenFlags & 0x30) == 0 );
	// no inherit.
	SP_ASSERT( (nOpenFlags & 0x80) == 0 );
	
	// map create mode.
	if (nOpenFlags & modeCreate)
	{
		nAccess	|=	O_CREAT;
		if (nOpenFlags & modeNoTruncate)
			;
		else
			nAccess	|=	O_TRUNC;
	}
	
	nAccess	|=	O_BINARY;

	UINT	hFile	=	hFileNull;
	hFile	=	open( lpszFileName, nAccess, S_IREAD | S_IWRITE );

	if( hFileNull == hFile )
		return	FALSE;
	
	m_hFile = (HFILE)hFile;
	m_bCloseOnDelete	=	TRUE;
	m_strFileName		=	lpszFileName;

	return TRUE;
}

BOOL CSPFile::CopyFile( LPCTSTR lpExistingFileName,
					   LPCTSTR lpNewFileName, BOOL bFailIfExists )
{
	return ::CopyFile( lpExistingFileName, lpNewFileName, bFailIfExists );
}

UINT CSPFile::Read(void* lpBuf, UINT nCount)
{
	SP_ASSERT_VALID(this);
	SP_ASSERT(m_hFile != (UINT)hFileNull);

	if (nCount == 0)
		return 0;   // avoid Win32 "null-read"

	SP_ASSERT(lpBuf != NULL);
	SP_ASSERT(SP_IsValidAddress(lpBuf, nCount));

	int	nRet	=	read( m_hFile, lpBuf, nCount );
	if( nCount != (UINT)nRet )
	{
		SetLastError( errCFileSystem_ReadFile );
		//SP_ASSERT( FALSE );
	}

	return	nRet;
}

void CSPFile::Write(const void* lpBuf, UINT nCount)
{
	SP_ASSERT_VALID(this);
	SP_ASSERT(m_hFile != (UINT)hFileNull);

	if (nCount == 0)
		return;     // avoid Win32 "null-write" option

	SP_ASSERT(lpBuf != NULL);
	SP_ASSERT(SP_IsValidAddress((void *)lpBuf, nCount, FALSE));

	int	nRet	=	write( m_hFile, lpBuf, nCount );
	if( nCount != (UINT)nRet )
	{
		SetLastError( errCFileSystem_WriteFile );
		SP_ASSERT( FALSE );
	}
}

void CSPFile::WriteString(LPCTSTR lpsz)
{
	SP_ASSERT(SP_IsValidString(lpsz));
	Write(lpsz, lstrlen(lpsz) * sizeof(TCHAR));
}

LPTSTR CSPFile::ReadString(LPTSTR lpsz, UINT nMax)
{
	// if nMax is negative (such a large number doesn't make sense given today's
	// 2gb address space), then assume it to mean "keep the newline".
	int nStop = (int)nMax < 0 ? -(int)nMax : (int)nMax;
	SP_ASSERT(SP_IsValidAddress(lpsz, (nStop+1) * sizeof(TCHAR)));

	TCHAR ch;
	int nRead = 0;

	lpsz[nRead] = '\0';
	while (nRead < nStop)
	{
		if( sizeof(TCHAR) != Read( &ch, sizeof(TCHAR) ) )
		{
			if( 0 == nRead )
				return NULL;
		}

		// stop and end-of-line (trailing '\n' is ignored)
		if (ch == '\r')
			continue;

		if (ch == '\n')
		{
			// store the newline when called with negative nMax
			if ((int)nMax != nStop)
				lpsz[nRead++] = ch;
			break;
		}
		lpsz[nRead++] = ch;
	}

	lpsz[nRead] = '\0';
	return lpsz;
}

BOOL CSPFile::ReadString( CSPString & rString )
{
	rString.Empty();
	const int nMaxSize = 256;
	LPTSTR lpsz = rString.GetBuffer(nMaxSize);
	LPTSTR lpszResult;
	int nLen;
	for (;;)
	{
		lpszResult = ReadString(lpsz, (UINT)-nMaxSize); // store the newline
		rString.ReleaseBuffer();

		// if string is read completely or EOF
		if (lpszResult == NULL ||
			(nLen = lstrlen(lpsz)) < nMaxSize ||
			lpsz[nLen-1] == '\n')
		{
			break;
		}

		nLen = rString.GetLength();
		lpsz = rString.GetBuffer(nMaxSize + nLen) + nLen;
	}

	// remove '\n' from end of string if present
	lpsz = rString.GetBuffer(0);
	nLen = rString.GetLength();
	if (nLen != 0 && lpsz[nLen-1] == '\n')
		rString.GetBufferSetLength(nLen-1);

	return lpszResult != NULL;
}

LONG CSPFile::Seek(LONG lOff, UINT nFrom)
{
	SP_ASSERT_VALID(this);
	SP_ASSERT(m_hFile != (UINT)hFileNull);
	
	SP_ASSERT(nFrom == begin || nFrom == end || nFrom == current);
#ifdef	SP_WIN32	
	SP_ASSERT(begin == FILE_BEGIN && end == FILE_END && current == FILE_CURRENT);
#endif

	UINT	nOrgin	=	-1;
	if( nFrom == begin )
		nOrgin	=	SEEK_SET;
	if( nFrom == end )
		nOrgin	=	SEEK_END;
	if( nFrom == current )
		nOrgin	=	SEEK_CUR;
	
	SP_ASSERT(	SEEK_SET == nOrgin || SEEK_CUR == nOrgin ||	SEEK_END == nOrgin );
	if( nOrgin == -1 )
	{
		SetLastError( errCSPFile_SeekFile );
		return -1;
	}

	LONG lnRet	=	lseek( m_hFile, lOff, nOrgin );
	if( -1 == lnRet )
		SetLastError( errCSPFile_SeekFile );

	return	lnRet;
}

void CSPFile::Flush()
{
	SP_ASSERT_VALID(this);

	if (m_hFile == (UINT)hFileNull)
		return;
	
	_commit( m_hFile );
}

void CSPFile::Close()
{
	SP_ASSERT_VALID(this);
	SP_ASSERT(m_hFile != (UINT)hFileNull);

	if( hFileNull != m_hFile )
	{
		if( -1 == close( m_hFile ) )
		{
			SetLastError( errCSPFile_CloseFile );
			SP_ASSERT( FALSE );
		}
		m_hFile	=	hFileNull;
	}

	m_hFile = (UINT) hFileNull;
	m_bCloseOnDelete = FALSE;
	m_strFileName.Empty();
}

void CSPFile::Abort()
{
	SP_ASSERT_VALID(this);
	if (m_hFile != (UINT)hFileNull)
	{
		// close but ignore errors
		close( m_hFile );
		m_hFile = (UINT)hFileNull;
	}
	m_strFileName.Empty();
}

void CSPFile::SeekToBegin()
{
	Seek( 0, begin );
}

DWORD CSPFile::SeekToEnd()
{
	return Seek( 0, end );
}

DWORD CSPFile::GetLength() const
{
	SP_ASSERT_VALID(this);

	DWORD dwLen, dwCur;

	// Seek is a non const operation
	CSPFile	*pFile	=	(CSPFile*)this;
	dwCur = pFile->Seek(0L, current);
	dwLen = pFile->SeekToEnd();
	SP_VERIFY(dwCur == (DWORD)pFile->Seek(dwCur, begin));

	return dwLen;
}

DWORD CSPFile::GetPosition() const
{
	SP_ASSERT_VALID(this);
	SP_ASSERT(m_hFile != (UINT)hFileNull);

	DWORD dwPos = lseek( m_hFile, 0, SEEK_CUR );
	return dwPos;
}

#ifdef	_DEBUG
void CSPFile::Dump() const
{
	Object::Dump( );
}

void CSPFile::AssertValid() const
{
	Object::AssertValid();
	if( m_hFile == UINT(hFileNull) )
	{
		SP_ASSERT(m_strFileName.IsEmpty());
	}
}
#endif	//	_DEBUG

// CSPFile does not support direct buffering (CMemFile does)
UINT CSPFile::GetBufferPtr(UINT nCommand, UINT /*nCount*/,
	void** /*ppBufStart*/, void** /*ppBufMax*/)
{
	SP_ASSERT(nCommand == bufferCheck);
	UNUSED(nCommand);    // not used in retail build

	return 0;   // no support
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
成人av资源站| 麻豆91精品视频| 97se亚洲国产综合自在线| 国产精品你懂的| 99re6这里只有精品视频在线观看 99re8在线精品视频免费播放 | 99久久精品免费看国产免费软件| 国产精品久久网站| 91国产成人在线| 亚洲成a人片综合在线| 9191久久久久久久久久久| 毛片一区二区三区| 国产欧美一区二区在线| 色呦呦网站一区| 视频一区二区三区在线| 久久久久青草大香线综合精品| 国产成人免费视频| 亚洲欧美视频在线观看| 在线播放视频一区| 国产一区二区不卡在线 | 色狠狠色噜噜噜综合网| 午夜国产不卡在线观看视频| 精品国产成人系列| 94色蜜桃网一区二区三区| 午夜av区久久| 国产日产亚洲精品系列| 欧美亚洲综合另类| 国产曰批免费观看久久久| 亚洲女同一区二区| 精品区一区二区| 色综合久久综合网欧美综合网| 天天av天天翘天天综合网色鬼国产 | 国产偷国产偷精品高清尤物 | 国产乱人伦偷精品视频免下载 | 午夜日韩在线电影| 久久影视一区二区| 欧美视频在线一区| 国产a久久麻豆| 热久久国产精品| 亚洲免费观看高清在线观看| 欧美成人a在线| 欧美性videosxxxxx| 国产成人av一区| 日韩高清不卡一区二区三区| 亚洲欧美综合网| 日韩女优毛片在线| 91福利精品第一导航| 国产精品白丝jk白祙喷水网站| 一区二区高清在线| 中文字幕免费不卡| 欧美大片拔萝卜| 欧美日韩综合一区| 96av麻豆蜜桃一区二区| 国产成人在线看| 久久草av在线| 日本视频一区二区三区| 亚洲自拍都市欧美小说| 中文字幕视频一区| 国产区在线观看成人精品 | 国产午夜一区二区三区| 88在线观看91蜜桃国自产| 色素色在线综合| 国产成人av电影免费在线观看| 久久www免费人成看片高清| 午夜精品久久久久影视| 亚洲成在线观看| 午夜av电影一区| 亚洲成人第一页| 无码av免费一区二区三区试看| 亚洲欧美另类图片小说| 亚洲天堂免费看| 中文字幕一区二区三区不卡| 欧美激情在线看| 国产精品理论片| 最新热久久免费视频| 国产精品久久久久久久午夜片| 国产三级精品三级在线专区| 2017欧美狠狠色| 久久久欧美精品sm网站| 国产亚洲精久久久久久| 欧美激情一区二区三区在线| 中文字幕在线观看不卡| 亚洲欧洲一区二区在线播放| ...xxx性欧美| 一区二区在线观看免费视频播放| 亚洲免费观看高清完整版在线观看 | 欧美挠脚心视频网站| 欧美日韩性生活| 欧美精品久久久久久久久老牛影院| 欧美理论在线播放| 日韩三级av在线播放| 久久夜色精品国产欧美乱极品| 国产片一区二区三区| 中文字幕一区二区三区在线播放| 亚洲精品第1页| 日本欧美韩国一区三区| 国产一区二区成人久久免费影院| 懂色av中文字幕一区二区三区| 懂色av中文字幕一区二区三区| 91免费精品国自产拍在线不卡| 欧亚一区二区三区| 日韩一级片网站| 久久久久久久久久久久久夜| 亚洲人成网站精品片在线观看| 亚洲国产一二三| 国产精品一区二区你懂的| 91免费在线视频观看| 欧美人妖巨大在线| 国产调教视频一区| 亚洲成人一区在线| 国产精品18久久久久久久久久久久 | 成人高清视频在线观看| 欧美性生交片4| 欧美一级片在线看| 中文在线资源观看网站视频免费不卡 | 97久久超碰精品国产| 日韩一区二区视频| 中文字幕一区二区视频| 日韩精品国产欧美| 成人av免费在线| 91精品在线一区二区| 国产精品福利一区二区| 日韩电影网1区2区| 91碰在线视频| 久久综合久久综合久久| 亚洲小说欧美激情另类| 高清成人免费视频| 日韩一级片网址| 亚洲午夜在线电影| 成人av电影在线播放| 日韩午夜精品视频| 一级特黄大欧美久久久| 国产不卡在线视频| 日韩欧美中文字幕公布| 亚洲一区二区中文在线| 福利一区二区在线| 日韩免费观看高清完整版 | 中文字幕一区二区三区av| 另类小说欧美激情| 欧美日韩在线播放| 亚洲天堂久久久久久久| 国产成人免费9x9x人网站视频| 欧美精品久久一区二区三区 | 天涯成人国产亚洲精品一区av| av不卡免费在线观看| 亚洲精品一区二区三区精华液| 亚洲国产视频一区| 91麻豆国产福利精品| 欧美激情综合在线| 国产美女一区二区| 精品日韩一区二区| 美女尤物国产一区| 91精品国产综合久久久久久久久久| 亚洲色图丝袜美腿| 99re热这里只有精品免费视频| 中文乱码免费一区二区| 国产麻豆视频一区二区| 久久先锋影音av| 国产一区二区三区久久悠悠色av| 日韩一区二区三区视频在线观看| 亚洲gay无套男同| 欧美在线不卡一区| 亚洲国产精品嫩草影院| 91国模大尺度私拍在线视频| 亚洲嫩草精品久久| 色婷婷综合久久| 亚洲免费观看高清完整版在线观看 | gogo大胆日本视频一区| 国产女人水真多18毛片18精品视频| 国产一区二区三区在线观看精品| 欧美成人一级视频| 国产一区不卡精品| 国产精品乱人伦一区二区| 不卡一卡二卡三乱码免费网站| 国产精品免费看片| 91色.com| 丝袜亚洲精品中文字幕一区| 91麻豆精品国产自产在线观看一区| 日韩在线a电影| 欧美成人r级一区二区三区| 国产一区二区三区电影在线观看| 久久影院电视剧免费观看| 成人av在线资源网站| 一区二区激情视频| 777a∨成人精品桃花网| 蜜桃av噜噜一区二区三区小说| 精品国产99国产精品| 成人高清视频在线观看| 亚洲香蕉伊在人在线观| 欧美一区二区三区在线视频| 国产在线播放一区二区三区| 中文字幕中文乱码欧美一区二区| 日本高清不卡一区| 日韩高清不卡一区二区三区| 久久精品亚洲乱码伦伦中文 | 日本大胆欧美人术艺术动态| 精品日韩成人av| 99久久伊人网影院| 亚洲成人动漫在线免费观看| 久久久蜜桃精品| 在线视频观看一区|