内存映射文件操作相关

    技术2022-05-20  67

    // 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; }


    最新回复(0)