win32 文件的创建、打开与关闭操作

https://www.cctry.com/thread-298330-1-1.html

文件的创建与打开:CreateFile
    在 Windows系统中,文件的创建与打开都是使用同一个API函数 CreateFile,
    通过传递不同的参数来表示是要创建一个新文件还是要打开一个已经存在的文件
CreateFile定义:
    HANDLE WINAPI CreateFile(
    LPCTSTR lpFileName,
    DWORD dwDesiredAccess,
    DWORD dwShareMode,
    LPSECURITY_ATTRIBUTES lpSecurityAttributes,
    DWORD dwCreationDisposition,
    DWORD dwFlagsAndAttributes,
    HANDLE hTemplateFile
    );
相关参数的解释,咱们进入到API说明文档的帖子中:
https://www.cctry.com/thread-298293-1-1.html

实战:
1、使用 CreateFile 创建一个新的空白文件;
2、使用 CreateFile 打开一个已经存在的文件;
3、使用 CreateFile 打开一个文件,如果文件存在则正常打开,文件不存在则新创建;
4、使用 CreateFile 打开一个文件,如果文件存在则打开并清空内容,文件不存在则新创建


关闭文件句柄:CloseHandle
函数声明如下:
BOOL CloseHandle(
  HANDLE hObject
);

相关参数的解释,咱们进入到API说明文档的帖子中:
https://www.cctry.com/thread-298294-1-1.html



获取文件大小的两种方式:
①、GetFileSize 获得文件大小:
函数详情详见:https://www.cctry.com/thread-298314-1-1.html
//获得小于4GB的文件大小:
DWORD dwSize = GetFileSize(hFile, NULL);


②、GetFileSizeEx 获得文件大小:
函数详情见:https://www.cctry.com/thread-298316-1-1.html

LARGE_INTEGER LargeFileSize = { 0 };
BOOL bRet = GetFileSizeEx(hFile, &LargeFileSize);
lFileSize = LargeFileSize.QuadPart;

 

课后作业:

1、通过本节课学习的知识,封装一个函数,实现判断某个路径的文件是否存在,如果存在则返回TRUE,不存在返回FALSE;
2、封装一个函数,实现清空某个文件的内容,函数执行成功返回TRUE,失败返回FALSE;
3、创建一个具有隐藏属性的文件。

BOOL CheckFileExist(LPCTSTR lpFilePath)
{
        if (!lpFilePath || _tcslen(lpFilePath) < 3) return FALSE;

        HANDLE hFile = CreateFile(lpFilePath, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
        if (hFile == INVALID_HANDLE_VALUE && GetLastError() == ERROR_FILE_NOT_FOUND) return FALSE;

        CloseHandle(hFile);
        return TRUE;
}

BOOL ClearFileContent(LPCTSTR lpFilePath)
{
        if (!lpFilePath || _tcslen(lpFilePath) < 3) return FALSE;

        HANDLE hFile = CreateFile(lpFilePath, GENERIC_WRITE, FILE_SHARE_READ, NULL, TRUNCATE_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
        if (hFile == INVALID_HANDLE_VALUE) return FALSE;

        CloseHandle(hFile);
        return TRUE;
}

BOOL CreateHideFile(LPCTSTR lpFilePath)
{
        if (!lpFilePath || _tcslen(lpFilePath) < 3) return FALSE;

        HANDLE hFile = CreateFile(lpFilePath, GENERIC_WRITE, FILE_SHARE_READ, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_HIDDEN, NULL);
        if (hFile == INVALID_HANDLE_VALUE) return FALSE;

        CloseHandle(hFile);
        return TRUE;
}


1、封装一个函数,传入文件路径参数,返回参数指定文件的大小,想想怎么封装这个函数更合理些,返回值要设计下!
2、封装一个函数,实现,把文件大小转换成MB或者GB为单位,带两位小数的字符串;

//函数执行失败返回-1,否则返回文件大小
LONGLONG GetFileSizeExt(LPCTSTR lpFilePath)
{
    if (!lpFilePath || _tcslen(lpFilePath) <= 3) return -1;
    HANDLE hFile = CreateFile(lpFilePath, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
    if (hFile == INVALID_HANDLE_VALUE) return -1;
    LARGE_INTEGER fileSize = { 0 };
    BOOL bRet = GetFileSizeEx(hFile, &fileSize);
    CloseHandle(hFile);
    if (!bRet) return -1;
    return fileSize.QuadPart;
}

BOOL ClearFileContent(LPCTSTR lpFilePath)
{
        if (!lpFilePath || _tcslen(lpFilePath) < 3) return FALSE;

        HANDLE hFile = CreateFile(lpFilePath, GENERIC_WRITE, FILE_SHARE_READ, NULL, TRUNCATE_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
        if (hFile == INVALID_HANDLE_VALUE) return FALSE;

        CloseHandle(hFile);
        return TRUE;
}

 

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Win32是Windows操作系统的API(Application Programming Interface)之一,提供了许多文件操作的函数,包括文件的保存和读取。 文件的保存: 1. 打开文件:使用CreateFile函数创建打开一个文件。 HANDLE hFile = CreateFile(szFileName, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); 其中,szFileName是文件名,GENERIC_WRITE表示要写入文件,CREATE_ALWAYS表示如果文件不存在则创建文件,如果文件存在则将其覆盖。其他参数可根据需要自行设置。 2. 写入数据:使用WriteFile函数向文件中写入数据。 DWORD dwBytesWritten = 0; WriteFile(hFile, lpBuffer, dwBytesToWrite, &dwBytesWritten, NULL); 其中,lpBuffer是要写入的数据,dwBytesToWrite是写入数据的字节数,dwBytesWritten是实际写入的字节数。如果写入成功,dwBytesWritten的值应该等于dwBytesToWrite。 3. 关闭文件:使用CloseHandle函数关闭文件句柄。 CloseHandle(hFile); 文件的读取: 1. 打开文件:使用CreateFile函数创建打开一个文件。 HANDLE hFile = CreateFile(szFileName, GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); 其中,GENERIC_READ表示要读取文件,OPEN_EXISTING表示只打开已经存在的文件,如果文件不存在则打开失败。其他参数可根据需要自行设置。 2. 读取数据:使用ReadFile函数从文件中读取数据。 DWORD dwBytesRead = 0; ReadFile(hFile, lpBuffer, dwBytesToRead, &dwBytesRead, NULL); 其中,lpBuffer是读取数据的缓冲区,dwBytesToRead是要读取的字节数,dwBytesRead是实际读取的字节数。如果读取成功,dwBytesRead的值应该等于dwBytesToRead。 3. 关闭文件:使用CloseHandle函数关闭文件句柄。 CloseHandle(hFile); 需要注意的是,文件操作涉及到文件的读写权限,如果没有权限则会操作失败。另外,文件操作涉及到文件的路径,需要注意路径的正确性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值