zoukankan      html  css  js  c++  java
  • 文件动态增长

    在看《windows核心编程》时,看到内存映射文件一章节,书中提到录音文件动态增长,作者也留下了连接关于他实现的“可增长的内存映射文件”的方法,我没找到,于是自己就试着写了一个,源代码贴出来,以供日后参考

    void increaseFile()
    {
        using namespace std;
        HANDLE hFile = CreateFile(
            L"me", GENERIC_READ|GENERIC_WRITE,
            0, NULL, CREATE_NEW,
            0, NULL);
    
        if (INVALID_HANDLE_VALUE == hFile)
        {
            cout << "CreateFile() failed:" << GetLastError() << endl;
            return;
        }
    
        unsigned int    tIncreaseSize = 0;
        DWORD            tFileSize = 0;
        const char* const    pStr = "abcdefghijklmnopqrstuvwxyz";
        while (true)
        {
            cin >> tIncreaseSize;
            if (0 == tIncreaseSize)
            {
                break;
            }
    
            tFileSize = GetFileSize(hFile, NULL);
    
            HANDLE hFileMapping = CreateFileMapping(
                hFile, NULL, PAGE_READWRITE,
                0, tFileSize + tIncreaseSize, L""); 
    
            if (NULL == hFileMapping)
            {
                cout << "CreateFileMapping() failed:" << GetLastError() << endl;
                break;
            }
    
            // 将文件映射到内存的地址空间,就可以操作这个内存映射文件了
            // 比如录音文件
            // 创建1K大小的文件,写内存映射文件,满了,用此文件再重建内存映射文件,将大小扩大1K,将指针移动至原文件的大小处,写新申请1K空间
            // 这样就可以实现不断的增长的内存映射文件
    
            LPVOID pViewFile = MapViewOfFile(
                hFileMapping, FILE_MAP_READ|FILE_MAP_WRITE,
                0,0,0);
    
            if (NULL == pViewFile)
            {
                break;
            }
    
            // 写数据
            strcpy((char*)pViewFile + tFileSize, pStr);
    
            UnmapViewOfFile(pViewFile);
    
            CloseHandle(hFileMapping);
        }
    
        CloseHandle(hFile);
    }
  • 相关阅读:
    进程通信方式-管道pipe
    进程间通信
    信号的发送与处理
    信号应用于事件通知
    信号的屏蔽,信号集
    信号的发送kill,raise,alarm,setitimer,abort,sigqueue
    信号处理函数的返回sigsetjmp/siglongjmp
    POJ 1562 Oil Deposits
    HDU 1016 Prime Ring Problem
    HDU 1010 Tempter of the Bone
  • 原文地址:https://www.cnblogs.com/emyueguang/p/3186779.html
Copyright © 2011-2022 走看看