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

行進中開火

C++夜未眠

快速擴展文件大小

首先轉一段博文:Linux下快速擴展文件大小

 在實際的開發過程中,我們可能需要在文件生成時就立即將文件更改為指定的大小,以便于后續簡化對文件的并發操作,
這一點在各類的下載工具中有很好的體現。
    要滿足這一需求,通常可以使用的最直觀的方式是:生成文件后,通過循環向文件中寫入任意數據,直到文件大小達到預期的大小。
對于較小的文件,這種方法可以接受,但是如果文件大小過大,那么這種方法就顯得不夠簡潔且低效。
    這里介紹一種高效且簡單的方法,基于函數"lseek"。
    執行"man lseek"之后,我們可以看到關于lseek特性的關鍵信息,如下:
    The lseek() function shall allow the file offset to be set beyond the end of the existing data in the file. 
    If data is later written at this point, subsequent reads of data in the gap shall return bytes with the 
    value 0 until data is actually written into the gap.
    The lseek() function shall not, by itself, extend the size of a file.

簡單的總結就是:
1. lseek 函數本身不會擴展文件的大小.
2. lseek 允許文件的偏移值超過文件的末端,如果下一次在這個偏移點寫入數據,那么在偏移之前的文件末端與偏移點之間的數據將會自動填充為0。

了解了上面幾點,大家應該想到了擴展文件大小將是一件多么簡潔高效的事情了:)  

那么,簡單的步驟如下


1. lseek( iFileHandle , 0 , SEEK_CUR ); //保存文件指針的當前位置以便于在擴展文件大小后恢復到當前位置 2. lseek( iFileHandle , iMoveOffset , SEEK_SET ); 3. write( iFileHandle , " " , WRITE_BYTE_COUNT ); //寫入一個字節的數據,完成對文件大小的更改 4. lseek( iFileHandle , iCurPos , SEEK_SET ); //恢復文件指針到之前保存的文件位置

實際上,在Windows中的_lseek或者_lseeki64也可以達到相同的目的。MSDN中的描述:

You can use _lseek to reposition the pointer anywhere in a file or beyond the end of the file.


最后,還有一個更好的方法:

int truncate(const char *path, off_t length); 
If the file previously was larger than length, the extra data is discarded. 
If the file was previously shorter than length, its size is increased, and the extended area appears as if it were zero-filled. 
這樣一來,截斷和擴展文件都可以用"truncate"來完成,這樣相對于上面的EnlargeFile就更簡潔了而且基于"truncate"的形式只需要一次系統調用即可實現相同的效果,效率上也更有優勢. 

但是,truncate函數在Windows中不可以使用。可以使用 SetEndOfFile 來代替。

 

Truncating or Extending Files

An application can truncate or extend a file by calling SetEndOfFile on sets the end-of-file marker to the current position of the file pointer.

Note that when a file is extended, the contents between the old and new end-of-file locations are not defined.

 

The SetEndOfFile function can be used to truncate or extend a file. If the file is extended, the contents of the file between the old end of the file and the new end of the file are not defined.

SetEndOfFile 可以用來擴展文件,當一個文件被擴展,被擴展部分,是未被定義的。也就是說,新擴展出來的部分,沒有被付初值,沒有用0填充。

還需要注意一點,

If CreateFileMapping is called to create a file mapping object for hFileUnmapViewOfFile must be called first to unmap all views and call CloseHandle to close the file mapping object before you can call SetEndOfFile.

也就是說,在Mapping狀態的文件,是不能調用SetEndOfFile的。

MSDN鏈接:http://msdn.microsoft.com/en-us/library/aa365531(VS.85).aspx

 

 

 

 

posted on 2010-03-03 17:57 Jakcie 閱讀(919) 評論(0)  編輯 收藏 引用 所屬分類: C++ & CLinux & QT


只有注冊用戶登錄后才能發表評論。
網站導航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            国产精品日韩在线播放| 今天的高清视频免费播放成人| 亚洲欧洲在线一区| 欧美国产免费| 欧美刺激性大交免费视频| 亚洲二区在线观看| 亚洲国产天堂久久国产91| 欧美mv日韩mv国产网站| 亚洲国产精品一区二区第四页av| 亚洲电影免费观看高清完整版在线观看| 久久久夜精品| 99国产欧美久久久精品| 中文在线资源观看网站视频免费不卡 | 欧美日本亚洲| 亚洲午夜精品福利| 亚洲在线免费观看| 韩国三级电影一区二区| 亚洲福利视频二区| 欧美性猛交99久久久久99按摩| 欧美一区二区三区视频免费播放 | 午夜精品久久久久久久久久久 | 欧美国产日韩一区二区| 亚洲一区尤物| 久久国产精品99精品国产| 亚洲精品乱码久久久久久按摩观| 在线亚洲自拍| 亚洲国产午夜| 亚洲影音一区| 亚洲精品美女在线观看| 亚洲男人天堂2024| 日韩视频精品在线| 欧美一区免费视频| 一区二区三区精品视频在线观看| 亚洲一区日韩在线| 亚洲精品欧美| 久久精品免费| 午夜精品亚洲| 欧美日韩日韩| 亚洲东热激情| 国产一区二区精品丝袜| 亚洲伦理网站| 亚洲欧洲一区| 久久久国产成人精品| 午夜精品久久久久久久白皮肤| 免费不卡视频| 六月丁香综合| 国产欧美一区二区精品婷婷| 9l视频自拍蝌蚪9l视频成人| 亚洲国产高清高潮精品美女| 午夜在线一区二区| 亚洲欧美日韩中文在线制服| 欧美精品1区2区| 欧美二区在线看| 黄色av一区| 久久久久国产精品厨房| 欧美与欧洲交xxxx免费观看 | 欧美一级久久久| 亚洲欧美日本精品| 欧美日本免费| 亚洲精品免费电影| 亚洲美女av黄| 欧美国产视频日韩| 亚洲国产激情| 亚洲理伦电影| 欧美精品日韩www.p站| 亚洲第一搞黄网站| 日韩视频在线观看| 欧美剧在线免费观看网站| 亚洲国产精品久久91精品| 亚洲日韩中文字幕在线播放| 麻豆精品视频在线| 91久久午夜| 在线亚洲精品福利网址导航| 欧美午夜剧场| 欧美亚洲在线| 蜜桃久久av一区| 亚洲高清视频一区二区| 女人香蕉久久**毛片精品| 亚洲国产天堂久久综合| 日韩亚洲成人av在线| 欧美视频一区二区三区四区| 亚洲天堂av在线免费观看| 午夜亚洲影视| 一区二区三区在线视频观看| 欧美成人首页| 一本久久青青| 久久久噜噜噜久噜久久| 亚洲电影第1页| 欧美理论视频| 欧美一区国产一区| 亚洲国产一区二区三区在线播 | 日韩一本二本av| 欧美日韩一区在线| 欧美一级免费视频| 亚洲国产成人不卡| 午夜精品理论片| 在线观看91久久久久久| 欧美人与禽性xxxxx杂性| aa级大片欧美三级| 久久夜色精品国产欧美乱极品| 亚洲国产日韩欧美在线99| 欧美日韩国产123区| 欧美在线观看视频一区二区| 欧美激情亚洲自拍| 久久国产福利| 一本色道久久综合狠狠躁篇怎么玩| 国产精品国产三级国产a| 久久婷婷av| 亚洲欧美在线观看| 亚洲韩国日本中文字幕| 久久国产精品久久久久久久久久 | 久久精品99国产精品酒店日本| 亚洲区一区二区三区| 国产伦精品一区二区三区四区免费| 久久综合电影| 午夜视频久久久久久| 亚洲精品在线视频| 免费中文日韩| 欧美一级大片在线免费观看| 日韩网站免费观看| 在线免费观看成人网| 国产裸体写真av一区二区| 欧美日韩伦理在线免费| 玖玖国产精品视频| 欧美一区二区三区四区在线| 一本不卡影院| 亚洲精品视频啊美女在线直播| 久久影音先锋| 久久久国产91| 久久国产精品一区二区| 欧美亚洲日本国产| 亚洲一二三区在线| 99在线观看免费视频精品观看| 亚洲电影自拍| 亚洲国产第一| …久久精品99久久香蕉国产| 国产午夜精品一区理论片飘花| 国产精品久久久久久久久免费桃花| 欧美日韩国产精品成人| 欧美精品久久99久久在免费线| 欧美va天堂在线| 欧美大胆成人| 欧美激情一区二区三区不卡| 欧美成人精精品一区二区频| 另类春色校园亚洲| 欧美成人国产va精品日本一级| 免费中文日韩| 欧美激情中文字幕一区二区| 欧美高清视频在线观看| 欧美精品一区二区三| 欧美人交a欧美精品| 欧美日一区二区在线观看| 欧美三级电影大全| 国产精品激情电影| 国产日产欧美一区| 狠狠色综合日日| 亚洲国产视频直播| 亚洲美女在线视频| 一区二区三区高清在线观看| 亚洲一区二区成人| 欧美一区二区在线观看| 久久精品国产一区二区三| 久久久亚洲精品一区二区三区 | 久久久噜噜噜久久久| 老司机午夜精品视频在线观看| 美女国产一区| 99re在线精品| 亚洲欧美久久久久一区二区三区| 欧美一区二区精品| 蜜桃av噜噜一区二区三区| 欧美日韩成人在线播放| 国产精品系列在线| 尤物在线精品| 亚洲午夜影视影院在线观看| 久久久久九九视频| 亚洲国产一区在线观看| 亚洲欧美日本另类| 欧美刺激午夜性久久久久久久| 欧美午夜一区二区| 亚洲成色777777女色窝| 亚洲免费在线视频| 玖玖玖国产精品| 日韩午夜免费视频| 久久精精品视频| 国产精品久久久久久久7电影| 黄网动漫久久久| 亚洲一二三四久久| 欧美国产日韩精品免费观看| 亚洲一区在线观看免费观看电影高清| 性做久久久久久久免费看| 欧美77777| 精品99一区二区三区| 亚洲一区在线免费| 亚洲国产精品女人久久久| 午夜精品国产更新| 欧美三级精品| 亚洲精品一区二区三区婷婷月| 欧美在线影院| 一本色道久久综合亚洲精品不卡| 开元免费观看欧美电视剧网站|