파일 매핑
2411 단어 서류
#include "..\include\error_type.h"
#include <string>
#include <iostream>
#include <windows.h>
using namespace std;
class FileMap
{
public:
FileMap(const string& path, const string& name);
~FileMap();
file_map_crate_mode GetMapMode();
void TextData();
private:
HANDLE m_hFile;
HANDLE m_hFileMapping;
PBYTE m_pMapBase;
string m_path;
string m_name;
file_map_crate_mode m_craete_mode;
};
FileMap.cpp
#include "FileMap.h"
FileMap::FileMap(const string& path, const string& name)
{
DWORD nRet = error_ok;
m_craete_mode = file_map_open;
m_hFileMapping = OpenFileMappingA(FILE_MAP_READ, FALSE, name.c_str());
if(NULL == m_hFileMapping)
{
m_craete_mode = file_map_create;
cout << "open file maping failed. creating file mapping ->" << name << endl;
m_hFile = CreateFileA(path.c_str(), GENERIC_READ, PAGE_READONLY, NULL, OPEN_EXISTING, NULL, NULL);
if(INVALID_HANDLE_VALUE == m_hFile)
{
cout << "create file failed." << GetLastError() << endl;
nRet = error_create_file;
}
else
{
DWORD nSize = 0;
nSize = GetFileSize(m_hFile, NULL);
m_hFileMapping = CreateFileMappingA(m_hFile, NULL, PAGE_READONLY, 0, nSize, name.c_str());
if(NULL == m_hFileMapping)
{
cout << "create file mapping failed.
";
nRet = error_create_file_mapping;
}
}
}
else
{
cout << "open file mapping success.
";
}
if (NULL != m_hFileMapping)
{
m_name = name;
m_path = path;
m_pMapBase = (PBYTE)MapViewOfFile(m_hFileMapping, FILE_MAP_READ, 0, 0, 0);
}
}
file_map_crate_mode FileMap::GetMapMode()
{
return m_craete_mode;
}
void FileMap::TextData()
{
cout << "
file map data:
";
cout << m_pMapBase << endl;
}
FileMap::~FileMap()
{
UnmapViewOfFile(m_pMapBase);
CloseHandle(m_hFileMapping);
CloseHandle(m_hFile);
}
main.cpp #include "FileMap.h"
int main(int argc, char* argv[])
{
if(argc >=3)
{
FileMap map1(argv[1], argv[2]);
map1.TextData();
}
else
{
cout << "usage:pro.exe shr_name shr_path" << endl;
}
system("pause");
return 0;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
SF:alesforce에서 파일을 업로드하는 수신 객체*document에 folderId를 지정해야 합니다. private Document document = new Document(); public Document getDocument(){ return documen...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.