• 内存映射 那天自己改改


    #include<iostream>
    #include<windows.h>
    using namespace std;


    BOOL GetFileMemoReply(std::string &szReply, std::string szFileName);


    BOOL GetFileMemoReply(std::string &szReply, std::string szFileName)
    {
    HANDLE hFileReadHandle = CreateFile(szFileName.c_str(),  
    GENERIC_READ|GENERIC_WRITE,
    FILE_SHARE_READ,
    NULL,
    OPEN_EXISTING,
    FILE_ATTRIBUTE_NORMAL,
    NULL);  
    if(hFileReadHandle == INVALID_HANDLE_VALUE)
    {
    return FALSE;
    }


    /////////////////得到文件大小////////////////////
    DWORD dwFileSize = GetFileSize(hFileReadHandle, NULL);
    ////////////////////////////////////


    //创建一个文件映射内核对象;
    HANDLE hFileMapHandle = CreateFileMapping( hFileReadHandle,
    NULL,
    PAGE_READWRITE,
    0,
    0,
    "GTEagle" ); 
    if(hFileMapHandle == NULL)
    {
    //error in CreateFileMapping
    return FALSE;
    }


    //将文件数据映射到进程的地址空间;
    char *szFileMapBuf = (char *)MapViewOfFile( hFileMapHandle, 
    FILE_MAP_ALL_ACCESS,
    0,
    0, 
    0); 
    if(szFileMapBuf == NULL)
    {
    //error in MapViewOfFile
    return FALSE;
    }


    //读取数据;  
    szReply.assign(szFileMapBuf, dwFileSize);





    //关闭句柄;
    UnmapViewOfFile(szFileMapBuf); 
    CloseHandle(hFileMapHandle); 
    CloseHandle(hFileReadHandle); 
    return TRUE;
    }


    int main()
    {
    /////////////////////
    std::string szSendBuf;
    std::string szFileFullPath("d:\1.txt");
    GetFileMemoReply(szSendBuf,szFileFullPath );
    return 0;
    ///////////////////////
    //------------------------------------------------------内存映射方法;   
    //创建或打开文件内核对象;
    HANDLE fileH = CreateFile("6322.gtz",  
    GENERIC_READ|GENERIC_WRITE,
    FILE_SHARE_READ,
    NULL,
    OPEN_EXISTING,
    FILE_ATTRIBUTE_NORMAL,
    NULL);  
    if(fileH == INVALID_HANDLE_VALUE)
    {
    cout<<"error in CreateFile"<<endl;
    return -1;
    }


    /////////////////得到文件大小////////////////////
    DWORD size = GetFileSize(fileH, NULL);
    ////////////////////////////////////
    //创建一个文件映射内核对象;
    HANDLE mapFileH = CreateFileMapping( fileH,
    NULL,
    PAGE_READWRITE,
    0,
    0,
    "GTEagle" ); 
    if(mapFileH == NULL)
    {
    cout<<"error in CreateFileMapping"<<endl;
    return -1;
    }


    //将文件数据映射到进程的地址空间;
    char *mapH = (char *)MapViewOfFile( mapFileH, 
    FILE_MAP_ALL_ACCESS,
    0,
    0, 
    0); 
    if(mapH == NULL)
    {
    cout<<"error in MapViewOfFile"<<endl;
    return -1;
    }


    //读取数据;  
    std::string szFileBuf(mapH, size);
    ////////////////////////////////////////////////////
    HANDLE hFile ;
    hFile = CreateFile("7788.gtz", GENERIC_WRITE, 0, NULL, CREATE_NEW, FILE_ATTRIBUTE_NORMAL, NULL) ;
    DWORD num ;
    WriteFile(hFile, szFileBuf.c_str(), size, &num, NULL) ; // 第四个参数指定的是实际写入的文件大小
    CloseHandle(hFile) ;
    ////////////////////////////////////////////////////


    //关闭句柄;
    UnmapViewOfFile(mapH); 
    CloseHandle(mapFileH); 
    CloseHandle(fileH); 


    //------------------------------------------------------传统方法;
    return 0;
    }







    #include<iostream>

    #include <cstringt.h>
    #include<vector>
    #include<windows.h>
    #include <ctime>
    using namespace std;








    int main()
    {
        //------------------------------------------------------内存映射方法;
       
        //创建或打开文件内核对象;
        HANDLE fileH = CreateFile("6322.gtz",  
            GENERIC_READ|GENERIC_WRITE,
            FILE_SHARE_READ,
            NULL,
            OPEN_EXISTING,
            FILE_ATTRIBUTE_NORMAL,
            NULL);  
        if(fileH == INVALID_HANDLE_VALUE)
        {
            cout<<"error in CreateFile"<<endl;
            return -1;
        }


    /////////////////得到文件大小////////////////////
    DWORD size = GetFileSize(fileH, NULL);
    ////////////////////////////////////
        //创建一个文件映射内核对象;
        HANDLE mapFileH = CreateFileMapping( fileH,
            NULL,
            PAGE_READWRITE,
            0,
            0,
            "GTEagle" ); 
        if(mapFileH == NULL)
        {
            cout<<"error in CreateFileMapping"<<endl;
            return -1;
        }


        //将文件数据映射到进程的地址空间;
        char * mapH = (char *)MapViewOfFile( mapFileH, 
            FILE_MAP_ALL_ACCESS,
            0,
            0, 
            0); 
        if(mapH == NULL)
        {
            cout<<"error in MapViewOfFile"<<endl;
            return -1;
        }


        //读取数据;  
    std::string szFileBuf(mapH, size);
    ////////////////////////////////////////////////////
    HANDLE hFile ;
    hFile = CreateFile("7788.gtz", GENERIC_WRITE, 0, NULL, CREATE_NEW, FILE_ATTRIBUTE_NORMAL, NULL) ;
    DWORD num ;
    WriteFile(hFile, szFileBuf.c_str(), size, &num, NULL) ;// 第四个参数指定的是实际写入的文件大小
    CloseHandle(hFile) ;
    ////////////////////////////////////////////////////
        
        //关闭句柄;
        UnmapViewOfFile(mapH); 
        CloseHandle(mapFileH); 
        CloseHandle(fileH); 


        //------------------------------------------------------传统方法;
        return 0;
    }
  • 相关阅读:
    poj1703
    poj 2385
    poj 3169 差分约束
    poj3723 最大权森林
    POJ3255 次短路
    图论算法----最小生成树
    给linux操作系统安装中文环境
    Windows下使用python
    pku3668 Game of Lines
    pku3670 Eating Together
  • 原文地址:https://www.cnblogs.com/eaglezzb/p/4176487.html
Copyright © 2020-2023  润新知