⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 vdiskfile.cpp

📁 Virtual Disk Driver
💻 CPP
字号:
/*	VDiskFile.cpp	VDisk text file operation class	Copyright (C) 2003 Ken Kato*/#include "vdkbase.h"#include "vdkutil.h"#include "VDiskFile.h"#define BUFFER_SIZE	0x1000L	// 4KBVDiskFile::VDiskFile(){	m_hFile		= INVALID_HANDLE_VALUE;	m_pBuffer	= NULL;	m_pCurrent	= NULL;	m_nDataLen	= 0;}VDiskFile::~VDiskFile(){	if (m_hFile) {		VdkCloseFile(m_hFile);	}	if (m_pBuffer) {		VdkFreeMem(m_pBuffer);	}}VDKSTAT VDiskFile::Open(PCHAR pPath){	if (m_hFile != INVALID_HANDLE_VALUE) {		return VDK_FUNCTION;	}	return VdkOpenFile(&m_hFile, pPath, strlen(pPath), TRUE);}VDKSTAT VDiskFile::Close(){	if (m_pBuffer) {		VdkFreeMem(m_pBuffer);		m_pBuffer	= NULL;	}	if (m_hFile != INVALID_HANDLE_VALUE) {		VdkCloseFile(m_hFile);		m_hFile = INVALID_HANDLE_VALUE;	}	m_pCurrent	= NULL;	m_nDataLen	= 0;	return VDK_OK;}VDKSTAT VDiskFile::ReadByte(PUCHAR pBuffer, ULONG nLength, PULONG pResult){	return VdkReadFileAt(m_hFile, -1, pBuffer, nLength, pResult);}////	Read one text line//VDKSTAT VDiskFile::ReadText(PCHAR pBuffer, ULONG nLength, PULONG pResult){	VDKSTAT	ret = VDK_OK;	ULONG	result = 0;	//	//	prepare read buffer	//	if (m_pBuffer == NULL) {		if ((m_pBuffer = (PCHAR)VdkAllocMem(BUFFER_SIZE)) == NULL) {			return VdkLastError();		}		m_pCurrent = m_pBuffer;		m_nDataLen = 0;	}	while (result < nLength - 1) {		if (m_nDataLen == 0) {			//			//	no data left in the buffer -- read file			//			m_pCurrent = m_pBuffer;			ret = VdkReadFileAt(m_hFile, -1, m_pBuffer, BUFFER_SIZE, &m_nDataLen);			if (ret != VDK_OK || m_nDataLen == 0) {				break;			}		}		if (*m_pCurrent == '\r' || *m_pCurrent == '\n') {			//	encountered a newline			while (m_nDataLen && (*m_pCurrent == '\r' || *m_pCurrent == '\n')) {				m_pCurrent++;				m_nDataLen--;			}			if (result == 0) {				//	blank line				continue;			}			else {				//	one line completed				break;			}		}		else if (*m_pCurrent == '\0') {			//	encountered a null character - treat as EOF			break;		}		*(pBuffer++) = *(m_pCurrent++);		m_nDataLen--;		result++;	}	//	terminate the text string	*pBuffer = '\0';	//	store result length	if (pResult) {		*pResult = result;	}	//	read any data?	if (result == 0) {		ret = VDK_EOF;	}	return ret;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -