青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

    力為的技術博客

    聯系 聚合 管理
      154 Posts :: 1 Stories :: 561 Comments :: 0 Trackbacks

    ???????????????????????????????????? 如何通過FILE*操作內存文件

    /*
    問題概述:
    ? 有這樣一個第三方的庫函數void WriteDataToFile(FILE* pFile),它是向一個文件寫入數據。
    ? 現在需要通過函數WriteDataToFile生成臨時數據,但不能生成磁盤文件(需要在內存中操作)。
    ? 然后通過某種方式讀取內存中的數據。

    流程設想:
    1、
    創建一個內存文件
    獲取該內存文件的FILE*
    寫入數據
    2、
    打開該內存文件
    獲取內存文件的FILE*
    讀取內存文件的內容
    關閉
    3、
    關閉
    *********************************************************************************
    需要解決的問題:
    1. 內存文件的HANDLE是否可以轉換為FILE* (_open_osfhandle不可以)
    2. 內存文件的操作需要調用PVOID pView = MapViewOfFile(...); 通過pView才能更改內存文件之內容。
    ?? 通過FILE* 能否通過某種方式操作pView的內容
    3. 需要實現的函數(見下面的測試代碼)
    ?? FILE* GetFilePtrByMemFileHandle(HANDLE hMemFile)
    ?? void UpdateMemFile(HANDLE hMemFile)
    4. 如果該方案有問題,可以更改

    **********************************************************************************
    實現:
    ? 1.為了方便測試使用全局的文件HANDLE
    ? 2.模擬實現了WriteDataToFile函數
    ? 3.已有資料http://community.csdn.net/Expert/TopicView.asp?id=4317083

    ?1*/
    ?2#define?MF_NAME?TEXT("MF_FILE_NAME")
    ?3#define?MF_SIZE?4*1024
    ?4HANDLE?g_hMemFile?=?NULL;
    ?5//?模擬庫函數WriteDataToFile
    ?6void?WriteDataToFile(FILE*?pFile)
    ?7{
    ?8???ASSERT(pFile);
    ?9???fputs("Write?by?Lib?Function!\n",?pFile);
    10}

    11
    12BOOL?CreateMemFile()
    13{
    14g_hMemFile?=?CreateFileMapping(INVALID_HANDLE_VALUE,?
    15NULL,?PAGE_READWRITE,?0,?
    16MF_SIZE,?MF_NAME);
    17if(g_hMemFile?!=?NULL)
    18{
    19if(GetLastError()?==?ERROR_ALREADY_EXISTS)
    20{
    21TRACE("STL?MapFile?already?exists.");
    22CloseHandle(g_hMemFile);
    23return?FALSE;
    24}

    25return?TRUE;
    26}

    27return?FALSE;
    28}

    29
    30FILE*?GetFilePtrByMemFileHandle(HANDLE?hMemFile)
    31{
    32//.
    33//具體的實現
    34
    35//.
    36return?NULL;
    37}

    38void?UpdateMemFile(HANDLE?hMemFile)
    39{
    40//..
    41//需要實現
    42}

    43
    44void?Test()
    45{
    46//?1?寫內存文件
    47if(CreateMemFile()?==?FALSE)
    48return;
    49
    50?????FILE*?pFile?=?GetFilePtrByMemFileHandle(g_hMemFile);
    51?if(NULL?==?pFile)
    52?{
    53?CloseHandle(g_hMemFile);
    54?return;
    55?}

    56
    57?WriteDataToFile(pFile);
    58?//更新內存文件
    59?UpdateMemFile(g_hMemFile);
    60
    61//?2?讀內存文件
    62?HANDLE?hFile?=?OpenFileMapping(FILE_MAP_READ?|?FILE_MAP_WRITE,?FALSE,?MF_NAME);
    63?if(hFile?!=?NULL)
    64?{
    65?FILE*?pReadFile?=?GetFilePtrByMemFileHandle(hFile);
    66?if(pReadFile)
    67?{
    68?char?strBuffer[BUFSIZ];
    69????????????int?nPtCount?=?0;
    70????????????while(fgets(strBuffer,?BUFSIZ,?pReadFile)?!=?NULL)
    71{
    72TRACE(strBuffer);
    73}

    74?}

    75?CloseHandle(hFile);
    76?}

    77//?3?關閉?
    78?CloseHandle(g_hMemFile);
    79}

    80
    81
    posted on 2005-10-14 17:30 力為 閱讀(7740) 評論(11)  編輯 收藏 引用 所屬分類: 4. C++ FAQ

    評論

    # re: 如何通過FILE*操作內存文件? 2005-10-15 14:01 任我行
    關注,等你寫全了,我就來用,哈哈。
      回復  更多評論
      

    # re: 如何通過FILE*操作內存文件? 2005-10-15 21:11 力為
    這個在CSDN上放了幾天也沒有人回答
    是不是太難了呢?  回復  更多評論
      

    # re: 如何通過FILE*操作內存文件? 2005-10-17 15:50 moonriver
    不理解為什么要這樣干? 能否把BACKGROUND將清楚些!  回復  更多評論
      

    # re: 如何通過FILE*操作內存文件? 2005-10-19 15:02 力為
    background:
    1. 使用第三方的接口生成某種格式的文件
    2. 自己從該文件中分析需要的數據
    3. 該文件為中間文件并不需要放在磁盤之上


    故用內存文件保存臨時數據
      回復  更多評論
      

    # re: 如何通過FILE*操作內存文件? 2005-12-04 14:43 hehehe
    不理解啊!把文件讀入緩沖區,再處理緩沖區中的文件,是這個意思嗎?  回復  更多評論
      

    # re: 如何通過FILE*操作內存文件? 2005-12-05 09:14 力為
    也可以這樣認為。
    只不過通過FILE如何把內容寫入緩沖區?  回復  更多評論
      

    # re: 如何通過FILE*操作內存文件? 2005-12-05 13:37 hehehe
    一般來說,我比較喜歡這個函數。。。
    BOOL ReadFile(
    HANDLE hFile, // handle of file to read
    LPVOID lpBuffer, // pointer to buffer that receives data
    DWORD nNumberOfBytesToRead, // number of bytes to read
    LPDWORD lpNumberOfBytesRead, // pointer to number of bytes read
    LPOVERLAPPED lpOverlapped // pointer to structure for data
    );
    那個lpBuffer就是指向緩沖區的指針,要在內存中操作文件,我就用這個。。。  回復  更多評論
      

    # re: 如何通過FILE*操作內存文件? 2005-12-05 13:50 力為
    但C語言的FILE*如何往緩沖區寫內容呢?  回復  更多評論
      

    # re: 如何通過FILE*操作內存文件? 2006-01-07 10:27 力為
    在懸掛了N月之后,我為此題下了結論:此題無解!:(  回復  更多評論
      

    # re: 如何通過FILE*操作內存文件? 2006-01-22 15:20 stronger
    https://sourceforge.net/project/shownotes.php?release_id=340318

      回復  更多評論
      

    # re: 如何通過FILE*操作內存文件? 2010-10-08 01:44 macostar_wzy
    內存映射API函數CreateFileMapping創建一個有名的共享內存:
    HANDLE CreateFileMapping(
    HANDLE hFile, // 映射文件的句柄,
    //設為0xFFFFFFFF以創建一個進程間共享的對象
    LPSECURITY_ATTRIBUTES lpFileMappingAttributes, // 安全屬性
    DWORD flProtect, // 保護方式
    DWORD dwMaximumSizeHigh, //對象的大小
    DWORD dwMaximumSizeLow,
    LPCTSTR lpName // 必須為映射文件命名
    );
    要把文件映像到內存,首先必須調用CreateFileMapping()函數,它需要用一個由CreateFile()函數打開并返回的文件句柄,對大多數共享內存的應用程序,必須把此句柄設置為0xFFFFFFFF,用來指定系統頁面文件。通過使用上面的特殊句柄,0XFFFFFFFF是INVALID_HANDLE_VALUE,表示不指定文件,在系統分頁文件(pagefile.sys)中分配映射的磁盤空間,可以不調用CreateFile函數,當然在完成時,也不必有一個內存的磁盤文件拷貝。
      回復  更多評論
      

    青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  1. <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            一区二区三区|亚洲午夜| 亚洲国产一区在线| 性欧美8khd高清极品| 99视频精品全部免费在线| 亚洲精品乱码久久久久久黑人| 欧美在线播放视频| 久久亚洲国产精品一区二区| 久久女同精品一区二区| 免费在线亚洲欧美| 亚洲国产精品久久精品怡红院| 亚洲精品乱码久久久久久蜜桃91| 亚洲精品久久7777| 午夜电影亚洲| 久久久综合激的五月天| 欧美成人首页| 国产精品爱啪在线线免费观看| 国产精品免费区二区三区观看| 国产在线观看精品一区二区三区| 亚洲国产精品一区二区第四页av| 一本色道久久综合亚洲精品不卡| 香蕉成人久久| 亚洲福利一区| 欧美一区二区播放| 欧美日韩成人一区| 国内精品久久久久久久影视麻豆 | 亚洲精品影院| 欧美在线不卡| 亚洲精品综合| 麻豆精品视频在线观看| 国产精品爽黄69| 亚洲六月丁香色婷婷综合久久| 亚洲专区一区| 亚洲精品乱码久久久久久黑人| 久久成人免费网| 欧美日韩国产综合一区二区| 精品成人国产| 久久久久一区二区| 一本一本久久| 欧美猛交免费看| 亚洲激情国产| 欧美福利在线观看| 欧美在线播放高清精品| 国产精品v亚洲精品v日韩精品| 亚洲精品美女在线| 欧美高清视频一区| 看欧美日韩国产| 在线观看91精品国产麻豆| 久久午夜色播影院免费高清| 欧美亚洲综合在线| 国产亚洲一区二区三区在线观看| 亚洲欧美亚洲| 亚洲午夜视频在线| 欧美色大人视频| 国产精品99久久久久久久vr | 国产精品美女| 欧美freesex8一10精品| 国产精品久久看| 宅男噜噜噜66国产日韩在线观看| 久久手机免费观看| 久久久久久久性| 136国产福利精品导航| 老司机久久99久久精品播放免费 | 亚洲专区在线视频| 国产精品久久91| 午夜精品成人在线| 亚洲欧美日本在线| 狠狠狠色丁香婷婷综合激情| 久久夜精品va视频免费观看| 久久这里有精品视频| 亚洲精品护士| 一区二区三区日韩在线观看| 国产精品国产三级国产a| 午夜激情亚洲| 欧美综合国产| 亚洲久久一区| 亚洲一级片在线观看| 国产自产高清不卡| 免费的成人av| 欧美日本中文| 欧美一级理论性理论a| 欧美自拍偷拍| 99人久久精品视频最新地址| 亚洲永久字幕| 亚洲激情六月丁香| 亚洲一级二级在线| 亚洲国产精品第一区二区三区| 亚洲精品免费在线| 国产性做久久久久久| 欧美高清日韩| 国产精品久久久久天堂| 久久中文久久字幕| 欧美日韩国产欧| 久久久久久综合| 欧美国内亚洲| 久久精品网址| 欧美日韩亚洲系列| 免费欧美网站| 国产精品美女视频网站| 欧美成人精品高清在线播放| 欧美日韩在线一区| 午夜精品成人在线| 欧美福利视频在线观看| 久久精品一二三区| 欧美日韩一区视频| 你懂的亚洲视频| 国产女人水真多18毛片18精品视频| 欧美激情片在线观看| 国产视频观看一区| 一区电影在线观看| 亚洲美洲欧洲综合国产一区| 欧美在线观看视频在线| 亚洲一区尤物| 免费在线成人av| 久久这里只有| 国产一区亚洲| 午夜在线不卡| 欧美精品一区二区高清在线观看| 久久精品国产77777蜜臀| 欧美日韩精品二区| 久久综合伊人77777蜜臀| 国产精品爽爽ⅴa在线观看| 日韩午夜在线| 艳妇臀荡乳欲伦亚洲一区| 免费观看成人网| 麻豆av一区二区三区久久| 国产精品视频免费观看www| 亚洲精品一二区| 亚洲区欧美区| 欧美国产综合视频| 亚洲国产精品高清久久久| 伊人色综合久久天天| 久久成人精品电影| 久久久久在线观看| 国产午夜精品视频| 香蕉久久夜色精品国产| 久久狠狠亚洲综合| 很黄很黄激情成人| 久久久综合网站| 欧美成人亚洲| 日韩视频免费在线| 欧美午夜不卡视频| 亚洲一区二区在线免费观看| 亚洲欧美日韩另类| 国产毛片一区二区| 欧美在线地址| 欧美电影在线观看完整版| 亚洲欧洲在线看| 欧美日韩精品一区| 亚洲伊人一本大道中文字幕| 久久久精彩视频| 一区二区在线视频| 免费在线看一区| 亚洲免费观看在线观看| 亚洲永久视频| 黑人操亚洲美女惩罚| 欧美成人午夜激情| 亚洲一二三区在线| 麻豆国产va免费精品高清在线| 亚洲国产精品视频一区| 欧美午夜精品久久久久久超碰| 亚洲欧美国产精品va在线观看| 久热精品在线| 一本色道精品久久一区二区三区| 国产精品www| 久久精品亚洲乱码伦伦中文 | 亚洲午夜免费视频| 国产伦精品一区二区三区高清版 | 性欧美大战久久久久久久久| 国产亚洲欧美日韩一区二区| 欧美va天堂在线| 亚洲一区二区三区免费在线观看| 久久久美女艺术照精彩视频福利播放| 在线欧美日韩| 欧美午夜电影在线| 久久久久成人精品免费播放动漫| 亚洲三级视频在线观看| 欧美专区在线| 亚洲伦理在线观看| 国产色爱av资源综合区| 欧美大片一区二区| 欧美一区=区| 欧美资源在线观看| 91久久夜色精品国产网站| 国产精品国产福利国产秒拍| 欧美在线观看视频| 日韩视频中文字幕| 久久婷婷人人澡人人喊人人爽| 夜夜嗨av一区二区三区四季av| 韩国精品久久久999| 欧美日韩成人一区| 久久野战av| 欧美一区二区日韩| 一区二区三区波多野结衣在线观看| 蜜桃av一区二区三区| 午夜性色一区二区三区免费视频| 亚洲日韩第九十九页| 狠狠综合久久av一区二区小说| 国产精品美女| 国产精品入口麻豆原神| 欧美日韩在线播放一区|