file.cpp

来自「这是本人在工作中积累的VC++类库」· C++ 代码 · 共 105 行

CPP
105
字号
/************************************************************************
模快名:		moxu 公共类库
功能:		文件读写
完成日期:	2007-10-20
作者:		许 培 Xu Pei(Email/MSN: peimoxu@163.com)

本代码可以自由使用,但因使用本代码造成的后果,本人不承担任何责任
************************************************************************/

#include "StdAfx.h"
#include "File.h"

namespace moxu
{

	File::File() :
	m_handle(INVALID_HANDLE_VALUE)
	{
	}

	File::~File()
	{
		Close();
	}

	bool File::Create(const TString& fileName)
	{
		Close();
		m_handle = CreateFile(
			fileName.c_str(),
			GENERIC_READ | GENERIC_WRITE,
			FILE_SHARE_READ,
			NULL,
			CREATE_ALWAYS,
			FILE_ATTRIBUTE_NORMAL,
			NULL);
		return (m_handle == INVALID_HANDLE_VALUE) ? false : true;
	}

	bool File::Open(const TString& fileName, int flag)
	{
		Close();
		m_handle = CreateFile(
			fileName.c_str(),
			flag,
			FILE_SHARE_READ,
			NULL,
			OPEN_EXISTING,
			FILE_ATTRIBUTE_NORMAL,
			NULL);
		return (m_handle == INVALID_HANDLE_VALUE) ? false : true;
	}

	void File::Close()
	{
		if(m_handle != INVALID_HANDLE_VALUE)
		{
			CloseHandle(m_handle);
			m_handle = INVALID_HANDLE_VALUE;
		}
	}

	unsigned int File::Read(LPVOID buffer, DWORD  size)
	{
		DWORD count;
		if(m_handle == INVALID_HANDLE_VALUE)
			return 0;
		if(!ReadFile(m_handle, buffer, size, &count, NULL))
			return 0;
		return count;
	}

	unsigned int File::Write(LPCVOID buffer, DWORD  size)
	{
		DWORD count;
		if(m_handle == INVALID_HANDLE_VALUE)
			return 0;
		if(!WriteFile(m_handle, buffer, size, &count, NULL))
			return 0;
		return count;
	}

	UINT64 File::GetPointer()
	{
		if(m_handle == INVALID_HANDLE_VALUE)
			return 0;
		LARGE_INTEGER llPos = {0, 0};
		llPos.LowPart = SetFilePointer(m_handle, llPos.LowPart, &llPos.HighPart, FILE_CURRENT);

		return llPos.QuadPart;
	}

	bool File::SetPointer(UINT64 pos)
	{
		if(m_handle == INVALID_HANDLE_VALUE)
			return false;
		LARGE_INTEGER llPos;
		llPos.QuadPart = pos;
		llPos.LowPart = SetFilePointer(m_handle, llPos.LowPart, &llPos.HighPart, FILE_BEGIN);

		return (UINT64)llPos.QuadPart == pos ? true : false;
	}

}

⌨️ 快捷键说明

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