内存映射文件操作相关
2011-04-15 12:08
218 查看
// ATS4DemoDlg.h : header file
//
#if !defined(AFX_ATS4DEMODLG_H__32E6642D_5F67_4613_B312_9C160914A930__INCLUDED_)
#define AFX_ATS4DEMODLG_H__32E6642D_5F67_4613_B312_9C160914A930__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
#include "stdafx.h"
//#include "log4nb.h"
class Deliver
{
public:
Deliver(const TCHAR * imageFilename,log4nb * logger);
BOOL openMapfile();
CString getFilename();
BOOL receiveFile(LPCTSTR tempFilename);
BOOL resultWriteBack(LPCTSTR resultXml);
private:
log4nb * De_logger;
protected:
TCHAR mtcImageFilename[250];
HANDLE mhFile;
INT64 lpMapAddress;
};
//{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ will insert additional declarations immediately before the previous line.
#endif // !defined(AFX_ATS4DEMODLG_H__32E6642D_5F67_4613_B312_9C160914A930__INCLUDED_)
#include "StdAfx.h"
#include "Deliver.h"
//#include "Log.h"
Deliver::Deliver(const TCHAR *imageFilename,log4nb * logger)
{
strcpy_s(mtcImageFilename,sizeof(mtcImageFilename),imageFilename);
De_logger = logger;
}
CString Deliver::getFilename()
{
De_logger->tmWrite("getFilename() begin");
CString temp;
temp = mtcImageFilename;//.Format("%s",mtcImageFilename);
De_logger->tmWrite("getFilename() end");
return temp;
}
BOOL Deliver::openMapfile()
{
De_logger->tmWrite("openMapfile() begin");
if( NULL == mtcImageFilename )
{
TRACE(_T("have no File map object./n"));
De_logger->tmWrite("have no File map object");
De_logger->tmException("openMapfile() Get ImageFilename Failed");
return FALSE;
}
mhFile = OpenFileMapping(FILE_MAP_ALL_ACCESS,//read/write permission.
FALSE,//do not inherit name of object
mtcImageFilename);
if( NULL == mhFile )
{
TRACE(_T("OpenFileMapping failed./n"));
De_logger->tmException("openMapfile() Open file mapping Failed");
return FALSE;
}
lpMapAddress = (INT64)MapViewOfFile(mhFile,FILE_MAP_ALL_ACCESS,0,0,0);
if( NULL == lpMapAddress )
{
TRACE(_T("MapViewOfFile failed./n"));
De_logger->tmException("openMapfile() Get view of filemapping Failed");
return FALSE;
}
De_logger->tmWrite("openMapfile() end");
return TRUE;
}
BOOL Deliver::receiveFile(LPCTSTR tempFilename)
{
De_logger->tmWrite("receiveFile() begin");
if( NULL == lpMapAddress)
{
TRACE(_T("Image file address is null."));
De_logger->tmException("receiveFile() Get MapAddress Failed");
return FALSE;
}
LPVOID lpBuffer = new BYTE[2048];
DWORD nNumberOfBytesToWrite = 0;
//LPDWORD lpNumberOfBytesWritten;
//nNumberOfBytesToWrite = *((LPDWORD) lpMapAddress);
memcpy(lpBuffer,(LPVOID)lpMapAddress,sizeof(int));//get the header,how long the file should be to read.
nNumberOfBytesToWrite = *((LPDWORD) lpMapAddress);
//memcpy(&nNumberOfBytesToWrite,lpBuffer,sizeof(int));
TRACE(_T("%ld"),nNumberOfBytesToWrite);
memcpy(lpBuffer,(LPVOID)(lpMapAddress + sizeof(int)),nNumberOfBytesToWrite);
HANDLE hFileTemp = CreateFile(tempFilename,GENERIC_ALL,0,NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL);
if(hFileTemp == INVALID_HANDLE_VALUE)
{
TRACE(_T("Create temp file failed./n"));
De_logger->tmWrite("Create temp file failed.");
De_logger->tmException("receiveFile() Create temp file Failed");
return FALSE;
}
CFile writeFile(hFileTemp);
writeFile.Write(lpBuffer,nNumberOfBytesToWrite);
CloseHandle(hFileTemp);
delete lpBuffer;
De_logger->tmWrite("receiveFile() end");
return TRUE;
}
BOOL Deliver::resultWriteBack(LPCTSTR resultXml)
{
De_logger->tmWrite("resultWriteBack() begin");
if( _tcslen(resultXml) < 1 )
{
TRACE(_T("Result is empty./n"));
De_logger->tmException("resultWriteBack() Get result xml Failed");
return FALSE;
}
int lenAddr = _tcslen(resultXml);
memcpy( (LPVOID)lpMapAddress,(LPVOID)(&lenAddr),sizeof(int) );
memcpy( (LPVOID)(lpMapAddress + sizeof(int)),(LPVOID)resultXml,lenAddr );
UnmapViewOfFile((LPVOID)lpMapAddress);
if( NULL != mhFile)
CloseHandle(mhFile);
De_logger->tmWrite("resultWriteBack() end");
return TRUE;
}
//
#if !defined(AFX_ATS4DEMODLG_H__32E6642D_5F67_4613_B312_9C160914A930__INCLUDED_)
#define AFX_ATS4DEMODLG_H__32E6642D_5F67_4613_B312_9C160914A930__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
#include "stdafx.h"
//#include "log4nb.h"
class Deliver
{
public:
Deliver(const TCHAR * imageFilename,log4nb * logger);
BOOL openMapfile();
CString getFilename();
BOOL receiveFile(LPCTSTR tempFilename);
BOOL resultWriteBack(LPCTSTR resultXml);
private:
log4nb * De_logger;
protected:
TCHAR mtcImageFilename[250];
HANDLE mhFile;
INT64 lpMapAddress;
};
//{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ will insert additional declarations immediately before the previous line.
#endif // !defined(AFX_ATS4DEMODLG_H__32E6642D_5F67_4613_B312_9C160914A930__INCLUDED_)
#include "StdAfx.h"
#include "Deliver.h"
//#include "Log.h"
Deliver::Deliver(const TCHAR *imageFilename,log4nb * logger)
{
strcpy_s(mtcImageFilename,sizeof(mtcImageFilename),imageFilename);
De_logger = logger;
}
CString Deliver::getFilename()
{
De_logger->tmWrite("getFilename() begin");
CString temp;
temp = mtcImageFilename;//.Format("%s",mtcImageFilename);
De_logger->tmWrite("getFilename() end");
return temp;
}
BOOL Deliver::openMapfile()
{
De_logger->tmWrite("openMapfile() begin");
if( NULL == mtcImageFilename )
{
TRACE(_T("have no File map object./n"));
De_logger->tmWrite("have no File map object");
De_logger->tmException("openMapfile() Get ImageFilename Failed");
return FALSE;
}
mhFile = OpenFileMapping(FILE_MAP_ALL_ACCESS,//read/write permission.
FALSE,//do not inherit name of object
mtcImageFilename);
if( NULL == mhFile )
{
TRACE(_T("OpenFileMapping failed./n"));
De_logger->tmException("openMapfile() Open file mapping Failed");
return FALSE;
}
lpMapAddress = (INT64)MapViewOfFile(mhFile,FILE_MAP_ALL_ACCESS,0,0,0);
if( NULL == lpMapAddress )
{
TRACE(_T("MapViewOfFile failed./n"));
De_logger->tmException("openMapfile() Get view of filemapping Failed");
return FALSE;
}
De_logger->tmWrite("openMapfile() end");
return TRUE;
}
BOOL Deliver::receiveFile(LPCTSTR tempFilename)
{
De_logger->tmWrite("receiveFile() begin");
if( NULL == lpMapAddress)
{
TRACE(_T("Image file address is null."));
De_logger->tmException("receiveFile() Get MapAddress Failed");
return FALSE;
}
LPVOID lpBuffer = new BYTE[2048];
DWORD nNumberOfBytesToWrite = 0;
//LPDWORD lpNumberOfBytesWritten;
//nNumberOfBytesToWrite = *((LPDWORD) lpMapAddress);
memcpy(lpBuffer,(LPVOID)lpMapAddress,sizeof(int));//get the header,how long the file should be to read.
nNumberOfBytesToWrite = *((LPDWORD) lpMapAddress);
//memcpy(&nNumberOfBytesToWrite,lpBuffer,sizeof(int));
TRACE(_T("%ld"),nNumberOfBytesToWrite);
memcpy(lpBuffer,(LPVOID)(lpMapAddress + sizeof(int)),nNumberOfBytesToWrite);
HANDLE hFileTemp = CreateFile(tempFilename,GENERIC_ALL,0,NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL);
if(hFileTemp == INVALID_HANDLE_VALUE)
{
TRACE(_T("Create temp file failed./n"));
De_logger->tmWrite("Create temp file failed.");
De_logger->tmException("receiveFile() Create temp file Failed");
return FALSE;
}
CFile writeFile(hFileTemp);
writeFile.Write(lpBuffer,nNumberOfBytesToWrite);
CloseHandle(hFileTemp);
delete lpBuffer;
De_logger->tmWrite("receiveFile() end");
return TRUE;
}
BOOL Deliver::resultWriteBack(LPCTSTR resultXml)
{
De_logger->tmWrite("resultWriteBack() begin");
if( _tcslen(resultXml) < 1 )
{
TRACE(_T("Result is empty./n"));
De_logger->tmException("resultWriteBack() Get result xml Failed");
return FALSE;
}
int lenAddr = _tcslen(resultXml);
memcpy( (LPVOID)lpMapAddress,(LPVOID)(&lenAddr),sizeof(int) );
memcpy( (LPVOID)(lpMapAddress + sizeof(int)),(LPVOID)resultXml,lenAddr );
UnmapViewOfFile((LPVOID)lpMapAddress);
if( NULL != mhFile)
CloseHandle(mhFile);
De_logger->tmWrite("resultWriteBack() end");
return TRUE;
}
相关文章推荐
- vc文件操作,内存映射
- 使用NIO来操作文件,内存映射
- 【JavaNIO的深入研究4】内存映射文件I/O,大文件读写操作,Java nio之MappedByteBuffer,高效文件/内存映射
- 【JavaNIO的深入研究4】内存映射文件I/O,大文件读写操作,Java nio之MappedByteBuffer,高效文件/内存映射
- java大文件读写操作,java nio 之MappedByteBuffer,高效文件/内存映射
- 文件映射的相关操作流程
- 在物理内存不足的情况下使用内存映射文件进行大内存操作
- vc文件操作,内存映射
- 66.文件映射为内存进行操作
- 运用内存映射文件加快文件操作速度
- 文件映射的相关操作流程
- linux c 通过内存映射,操作文件
- mmap设备操作-内存映射,把文件映射到内存中(国嵌笔记)
- [转载]vc文件操作 及 内存映射
- 【C语言】【unix c】使用mmap将文件映射到进程的虚拟地址空间,然后对内存的操作直接反应到文件中
- 映射文件到内存,像操作内存一样方便读写文件——MemFile
- java大文件读写操作,java nio 之MappedByteBuffer,高效文件/内存映射
- 使用内存映射文件加快文件操作速度
- Unix高级编程:malloc内存管理、缓冲机制、mmap内存映射到进程、系统调用文件操作
- 67.文件映射为内存进行操作与多线程 以及 文件映射到内存根据索引进行内存来实现读取多线程操作