首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

在Windows平台下,如何在不知道文件大小的情况下找到内存映射文件的结尾?

在Windows平台下,可以使用以下方法来找到内存映射文件的结尾,即文件的大小:

  1. 使用GetFileSize函数:可以通过调用GetFileSize函数获取文件的大小。该函数需要传入文件的句柄(通过CreateFile函数获取)和指向一个DWORD变量的指针,用于接收文件的大小。示例代码如下:
代码语言:txt
复制
#include <windows.h>

DWORD GetFileSizeFromHandle(HANDLE hFile) {
    DWORD fileSize = GetFileSize(hFile, NULL);
    return fileSize;
}
  1. 使用GetFileInformationByHandle函数:可以通过调用GetFileInformationByHandle函数获取文件的大小。该函数需要传入文件的句柄(通过CreateFile函数获取)和指向一个BY_HANDLE_FILE_INFORMATION结构体的指针,用于接收文件信息。文件的大小可以从结构体的nFileSizeLow和nFileSizeHigh成员中获取。示例代码如下:
代码语言:txt
复制
#include <windows.h>

DWORDLONG GetFileSizeFromHandle(HANDLE hFile) {
    BY_HANDLE_FILE_INFORMATION fileInfo;
    GetFileInformationByHandle(hFile, &fileInfo);
    DWORDLONG fileSize = fileInfo.nFileSizeLow | ((DWORDLONG)fileInfo.nFileSizeHigh << 32);
    return fileSize;
}
  1. 使用GetFileSizeEx函数:可以通过调用GetFileSizeEx函数获取文件的大小。该函数需要传入文件的句柄(通过CreateFile函数获取)和指向一个LARGE_INTEGER结构体的指针,用于接收文件的大小。示例代码如下:
代码语言:txt
复制
#include <windows.h>

DWORDLONG GetFileSizeFromHandle(HANDLE hFile) {
    LARGE_INTEGER fileSize;
    GetFileSizeEx(hFile, &fileSize);
    return fileSize.QuadPart;
}

以上方法可以在不知道文件大小的情况下找到内存映射文件的结尾。在实际应用中,可以根据具体需求选择合适的方法来获取文件大小,并进行相应的处理。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

(61) 内存映射文件及其应用 - 实现一个简单的消息队列 / 计算机程序的思维逻辑

本节介绍内存映射文件,内存映射文件不是Java引入的概念,而是操作系统提供的一种功能,大部分操作系统都支持。 我们先来介绍内存映射文件的基本概念,它是什么,能解决什么问题,然后我们介绍如何在Java中使用,我们会设计和实现一个简单的、持久化的、跨程序的消息队列来演示内存映射文件的应用。 基本概念 所谓内存映射文件,就是将文件映射到内存,文件对应于内存中的一个字节数组,对文件的操作变为对这个字节数组的操作,而字节数组的操作直接映射到文件上。这种映射可以是映射文件全部区域,也可以是只映射一部分区域。 不过,这种

05
  • c++windows内核编程笔记day12 硬盘逻辑分区管理、文件管理、内存管理[通俗易懂]

    GetSystemDirectory();//获取系统路径 GetWindowsDirectory();//获取windows路径 GetCurrentDirectory();//获取当前工作文件夹 SetCurrentDirectory();//改动当前工作文件夹 CreateFile/ReadFile/WriteFile/GetFileSize/SetFilePointer //返回文件大小的低32位 DWORD GetFileSize( HANDLE hFile,// handle to file LPDWORD lpFileSizeHigh //输出參数:返回文件大小的高32位 ); //创建文件并写入文本代码演示样例 HANDLE hf=CreateFile(“file.txt”,GENERIC_WRITE,FILE_SHARE_READ,NULL, OPEN_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL); char txt[]=”hello file to write”; DWORD len=0;//返回实际写入的长度 WriteFile(hf,txt,strlen(txt),&len,NULL); CloseHandle(hf); //读代替码演示样例 HANDLE hf=CreateFile(“file.txt”,GENERIC_READ,FILE_SHARE_READ, NULL,OPEN_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL); CHAR txt[1000]={0}; DWORD len=0;//实际读到的长度 ReadFile(hf,txt,sizeof(txt),&len,NULL); printf(“读取到的字符串:%s\n”,txt); CloseHandle(hf);

    02
    领券