文件映射对象和文件对象可以互换使用吗
Can file mapping object and file object be used interchangeably?
假设我想生成一个包装器函数来创建文件函数
这个新函数不会在磁盘上生成真正的文件,而是创建文件映射对象并返回新对象的句柄。
我看了这个例子,创建命名共享内存,并尝试实现我的功能:
#define BUF_SIZE 256
TCHAR szName[] = TEXT("Global\MyFileMappingObject");
HANDLE MyCreateFile()
{
HANDLE hMapFile = CreateFileMapping(
INVALID_HANDLE_VALUE, // use paging file
NULL, // default security
PAGE_READWRITE, // read/write access
0, // maximum object size (high-order DWORD)
BUF_SIZE, // maximum object size (low-order DWORD)
szName); // name of mapping object
return hMapFile;
}
问题
然而,当我尝试在ReadFile函数中使用返回的HANDLE
时,我得到了错误代码6 The handle is invalid.
问题
文件映射对象和文件对象可以互换使用吗?如果是,那么我的代码有什么问题?如果没有,你知道如何实现这样的功能吗?
CreateFileMapping返回的句柄是一个文件映射对象,而不是常规文件的句柄。CreateFileMapping是一系列函数的一部分,这些函数允许访问文件,就好像它们是内存或字节数组一样。一种方法是在MyCreateFile()函数内部调用MapViewOfFile(带有适当的参数),并让MyCreateFile)函数返回MapViewOfFile返回的指针。现在,您可以使用指针编写MyReadFile()和MyWriteFile()。
如果你能创建一个类并在里面包含所有这些函数,那就更好了
class CustomFile
{
private:
LPVOID *m_pData;
public:
//m_pData is initialized here via CreateFileMapping and
//MapViewOfFile.
CreateFile(...);
//m_pData is used here.
ReadFile(...);
WriteFile(...);
};
相关文章:
- CMake-按正确顺序将项目与C运行时对象文件链接
- 如何在h文件中包含.o对象文件
- 如何使用单独文件中的派生类访问友元函数对象
- QML:修改在不同QML文件(而非main.QML)中定义的子对象的属性
- 使用逗号解析文件对象?
- 使用 CIN COUT 显示垃圾值的文件对象?
- 如何确保我的"ifstream"文件对象指向的文件内容已更新?
- 如何从 GDI+ 图元文件对象获取原始图元文件字节
- pyQt5 将文件对象传递给 QWebEngineView
- 从文件对象的当前位置删除字符
- 使用相同的文件对象按顺序写入和读取文件
- 将 ETW 文件对象与 DiskIO 事件相关联
- 如何在构建时将 JSON 文件/对象包含在C++中
- 如何使用运算符<<通过 << 将文件对象馈送到我的类?
- 确定两个文件路径引用同一文件对象的最佳方法是什么
- 文件映射对象和文件对象可以互换使用吗
- 如何判断给定点是否在STereoLithography(.stl)文件对象c++内
- 如何使用Windows Portable Devices C++API获取MTP设备公开的文件夹中的所有文件(对象)的列
- 如何使用结构传递文件对象
- 文件对象->文件名不返回文件的完整路径