学习《C/C++ Windows 程序设计》的第三天
编译环境:Windows10 VS2019
学习目的:熟练掌握API运用,错误问题查找
API函数:
1、DeleteFile -> 可以使用 DeleteFile 删除指定存在的文件
2、CopyFile -> 可以使用 CopyFile 拷贝指定存在的文件到目标路径文件
3、MoveFile -> 可以使用 MoveFile 移动一个已存在的文件或者文件夹到新的位置
4、CreateFile -> 创建或打开文件或 I/O 设备。常用的 I/O 设备有:文件,文件流,目录,物理磁盘,卷,控制台缓冲区,磁带
驱动器,通信资源,邮筒和管道。
5、CloseHandle -> 关闭一个内核对象
6、GetFileSize | GetFileSizeEx ->该函数用于获取指定文件的大小(长度),以字节为单位[两者区别:文件大小,以4GB为分界]
API学习思路:
在无法确认使用哪个API函数的情况,利用Baidu搜索引擎搜索“关键字”[功能] + “API函数”,在搜索结果中找到所需的的函数。
查阅API函数介绍,注意查看一下内容:
1、各参数含义跟功能;
2、该函数所在的库文件;
3、使用函数的例子;
4、查看返回值,以便确认我们调用函数后完成的结果;
5、利用GetLastError()函数,查询错误码,在利用VS菜单栏中“工具”->“错误查找”->输入错误码,查看结果
实例操作:GetFileSize | GetFileSizeEx
步骤一:
创建新项目,同之前项目设置
A.文件小于4GB的情况下使用GetFileSize()
代码如下:
#include <Windows.h>
#include <tchar.h>
#include <iostream>
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, INT nCmdShow)
{
//需要打开文件的名,注意转译字符
LPCSTR szFileName = "D:\\wps\\WPS Office\\ksolaunch.exe";
//以只读的方式打开文件,并获取文件句柄
HANDLE hFile = CreateFile(szFileName, GENERIC_READ, FILE_SHARE_READ,NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL,NULL);
if (hFile != INVALID_HANDLE_VALUE)
{
//文件打开成功的情况
//文件大小确认小于4GB,第二参数设置为NULL
DWORD dwFileSize= GetFileSize(hFile, NULL);
//格式化输出
TCHAR szFileSize[128] = { 0 };
_stprintf(szFileSize,"文件大小:%d",dwFileSize);
MessageBox(NULL, szFileSize, "提示", MB_OK);
CloseHandle(hFile);
}
else
{
MessageBox(NULL, "打开文件失败", "提示", MB_OK);
DWORD dwErr = GetLastError();
TCHAR szErr[128] = { 0 };
_stprintf(szErr, "错误代码:%d", dwErr);
MessageBox(NULL, szErr, "提示", MB_OK);
}
return 0;
}
这次编译过程比较曲折,以后得加强规则性:
1、变量要确认是否正确,把szFileName与szFileSize弄错调试好久都是错,数据类型的不同;
2、CreateFile的第5个参数设置成“CREATE_NEW”后 调试一直是“打开文件失败”,测试GetLastError(),返回值0,
一阵雾水,后来调整为“OPEN_EXISTING”,就OK了,还是不能偷懒,需要了解各个参数值得含义。
B.文件大于4GB 使用GetFileSize(),需运动第二个参数
1.设置变量
DWORD dwFileSizeHigh=0;
2、将GetFileSize的第二参数设置为&dwFileSizeHigh,取地址;
3、设置变量
LONGLONG lFileSize=(((LONGLONG)dwFileSizeHigh)<<32)|dwFileSize;
4、输出“lFileSize”
大于4GB使用GetFileSizeEx()
GetFileSizeEx()为GetFileSize()的延伸函数,但是GetFileSizeEx(),第二个参数是PLARGE_INTEGER结构体,并且函数的
返回值为BOOL类型,文件的大小在结构体中进行查找。
2021年11月18日
|