win32文件读写demo

新建一个控制台工程;代码;

// file.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <windows.h>
#include <tchar.h>
#include <stdio.h>

HANDLE hOutput;

void perro(LPTSTR pszTitle){
	LPVOID pvErrMsg = NULL;
	DWORD nError = GetLastError();
	FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS,
		NULL, nError,
		MAKELANGID(LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED),
		(LPTSTR)&pvErrMsg,
		0, NULL);
	TCHAR szText[256];
	HANDLE hOutput = GetStdHandle(STD_OUTPUT_HANDLE);
	wsprintf(szText, "%s(errno=%d):%s\n", pszTitle, nError, (LPTSTR)pvErrMsg);
	WriteConsole(hOutput, szText, wcslen(szText), NULL, NULL);
	WriteConsole(hOutput, szText, 50, NULL, NULL);
	LocalFree(pvErrMsg);
}

void Create()
{
	HANDLE hFile = CreateFile(
		_T("Y:/file.txt"), GENERIC_WRITE,
		FILE_SHARE_READ, NULL, CREATE_ALWAYS,
		FILE_ATTRIBUTE_NORMAL, NULL);
	CloseHandle(hFile);
}
void Write()
{
	HANDLE hFile = CreateFile(
		_T("Y:/file.txt"), GENERIC_WRITE,
		FILE_SHARE_READ, NULL, OPEN_ALWAYS,
		FILE_ATTRIBUTE_NORMAL, NULL);
	// 1 多字节字符集
	CHAR szText[] = "hello win32 file";
	DWORD nLen = 0;
	WriteFile(hFile, szText, strlen(szText), &nLen, NULL);
	printf("准备写入:%d,实际写入:%d\n",strlen(szText), nLen);
	// 2 Unicode字符集
	//TCHAR szText[] = _T("hello file");
	//DWORD nLen = 0;
	//WriteFile(hFile, szText, wcslen(szText)*sizeof(szText[0]), &nLen, NULL);
	//TCHAR pszText[256] = { 0 };
	//wsprintf(pszText, _T("准备写入:%d,实际写入:%d\n"), wcslen(szText), nLen);
	//WriteConsole(hOutput, pszText, wcslen(pszText), NULL, NULL);
	CloseHandle(hFile);
}
void Read()
{
	HANDLE hFile = CreateFile(_T("y:/file.txt"),
		GENERIC_READ, FILE_SHARE_READ, NULL,
		OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL,
		NULL);
	DWORD nHight = 0;
	DWORD nLow = GetFileSize(hFile, &nHight);
	DWORD nLen = 0;
	// 1 多字节字符集
	//CHAR szText[256] = { 0 };
	//ReadFile(hFile, szText, nLow, &nLen, NULL);
	//printf("数据:%s,准备读取:%d,实际读取:%d\n",szText, nLow, nLen);
	// 2 Unicode 字符集
	TCHAR szText[256] = { 0 };
	ReadFile(hFile, szText, nLow, &nLen, NULL);
	TCHAR pszText[256] = { 0 };
	wsprintf(pszText, _T("数据:%s, 准备读取 : %d, 实际读取 : %d\n"), szText, nLow, nLen);
	//WriteConsole(hOutput, pszText, wcslen(pszText), NULL, NULL);
	WriteConsole(hOutput, pszText, 150, NULL, NULL);
	CloseHandle(hFile);
}
void UseFile()
{
//	CopyFile( _T("y:/file.txt"), _T("Y:/123/nofile.txt"), FALSE );
//	DeleteFile( _T("y:/file.txt"));
	MoveFile(_T("y:/123/nofile.txt"), _T("y:/file.txt"));
	perro(_T("MoveFile"));
}

int _tmain(int argc, _TCHAR* argv[])
{
	hOutput = GetStdHandle(STD_OUTPUT_HANDLE);
	Create( );
	Write( );
	Read( );
	//UseFile();
	return 0;
}

运行如下;

WriteConsole(hOutput, szText, wcslen(szText), NULL, NULL) 这句,wcslen(szText)会报如下的错,

    先改为直接使用数值, WriteConsole(hOutput, szText, 50, NULL, NULL);

如果要使用printf则包含 #include <stdio.h>;

hOutput = GetStdHandle(STD_OUTPUT_HANDLE),获取控制台窗口句柄;

WriteConsole(hOutput, szText, 50, NULL, NULL),往控制台窗口写;

猜你喜欢

转载自blog.csdn.net/bcbobo21cn/article/details/114651044