您的位置:首页 > 其它

内存映射文件操作相关

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;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: