新建一个控制台工程;代码;
// 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),往控制台窗口写;