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

行進中開火

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 閱讀(910) 評論(0)  編輯 收藏 引用 所屬分類: C++ & CLinux & QT

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            亚洲影院高清在线| 亚洲欧美日韩在线观看a三区 | 午夜精品亚洲一区二区三区嫩草| 好吊日精品视频| 国产精品一区二区三区观看| 欧美色一级片| 欧美四级伦理在线| 欧美日韩卡一卡二| 欧美视频日韩视频| 国产精品夜夜夜| 国产婷婷成人久久av免费高清| 国内精品国语自产拍在线观看| 狠狠色丁香婷婷综合| 在线播放亚洲一区| 一本色道久久综合亚洲精品小说 | 国产精品视频自拍| 国产欧美一区二区精品秋霞影院| 国产精品影视天天线| 国产亚洲综合在线| 亚洲高清激情| 亚洲图片在线| 久久久久综合一区二区三区| 欧美国产高清| 一本一本a久久| 久久国产黑丝| 欧美日韩91| 国产精品一区在线观看| 在线精品视频一区二区三四| 一区二区三区欧美亚洲| 久久国产精品毛片| 亚洲欧洲三级电影| 国产精品99久久99久久久二8| 欧美一区二区在线观看| 欧美福利专区| 国产视频久久久久久久| 亚洲第一天堂无码专区| 亚洲自拍三区| 欧美高清视频在线| 午夜在线观看免费一区| 欧美国产综合视频| 狠狠色噜噜狠狠色综合久| 麻豆91精品91久久久的内涵| 欧美亚洲成人精品| 伊人久久av导航| 午夜精品亚洲一区二区三区嫩草| 久久理论片午夜琪琪电影网| 中日韩视频在线观看| 欧美成人一区二区| 激情视频一区二区| 亚洲欧美国产精品桃花| 亚洲激情视频在线| 久久天天躁狠狠躁夜夜av| 国产精品一区2区| 一区二区日韩伦理片| 亚洲国产一区二区三区高清| 久久精品亚洲一区| 国产区精品视频| 在线一区二区三区做爰视频网站 | 亚洲第一色中文字幕| 久久国产加勒比精品无码| 国产精品视频99| 亚洲综合精品四区| 一区二区三区欧美视频| 欧美视频在线一区二区三区| 夜夜嗨av一区二区三区四季av| 欧美激情1区2区3区| 美女黄色成人网| 亚洲国产裸拍裸体视频在线观看乱了| 老司机免费视频一区二区三区| 久久国产精品99国产| 国产一区二区三区在线观看视频| 欧美综合二区| 久久久久久久网| 激情综合在线| 久久久国产91| 欧美一区二区视频网站| 国产一区二区精品久久91| 国产精品99久久久久久久女警| 亚洲精品视频免费在线观看| 久久免费黄色| 激情久久久久久久| 久久精品理论片| 欧美一区二区三区播放老司机| 国产精品日韩精品欧美精品| 国产午夜精品美女视频明星a级 | 香蕉乱码成人久久天堂爱免费| 欧美一级成年大片在线观看| 欧美日韩免费一区| 一区二区电影免费观看| 亚洲国产日日夜夜| 国产精品福利在线| 亚洲女ⅴideoshd黑人| 亚洲无限av看| 国产精品一区二区黑丝| 久久成人人人人精品欧| 午夜精品久久99蜜桃的功能介绍| 亚洲日本中文字幕| 欧美久久久久| 中国女人久久久| 一本一本久久a久久精品综合麻豆 一本一本久久a久久精品牛牛影视 | 亚洲高清色综合| 欧美国产三区| 欧美日韩www| 亚洲影院色无极综合| 亚洲一区二区三区精品在线| 国产欧美日韩专区发布| 久久综合久久综合久久综合| 久久综合伊人77777| 亚洲美女免费视频| 久久激情久久| 日韩午夜在线播放| 一区二区三区四区五区精品| 欧美久久久久久久| 欧美一区二区三区的| 久久精品国产久精国产一老狼| 亚洲欧洲一区二区三区久久| 亚洲精选中文字幕| 国产日韩欧美a| 欧美激情一区二区在线| 欧美午夜不卡在线观看免费| 久久久久久亚洲精品不卡4k岛国| 久久综合一区| 99成人免费视频| 麻豆国产精品一区二区三区| 亚洲伊人久久综合| 欧美在线观看一二区| 日韩视频免费| 欧美亚洲视频在线观看| 亚洲人成小说网站色在线| 宅男噜噜噜66一区二区66| 国产亚洲观看| 99视频精品全部免费在线| 国产在线拍偷自揄拍精品| 久久久久久久国产| 欧美日韩的一区二区| 久久精品一区二区三区四区| 欧美精品日韩一区| 久久夜色精品国产欧美乱| 欧美日韩一区在线| 欧美成人精品不卡视频在线观看| 欧美日韩在线三区| 欧美伊人久久久久久久久影院| 欧美婷婷久久| 91久久精品美女| 在线观看日韩av电影| 在线亚洲精品| 99精品99| 牛牛影视久久网| 羞羞色国产精品| 国产亚洲欧美日韩一区二区| 在线视频你懂得一区| 亚洲国产专区| 久久综合狠狠综合久久综合88| 欧美一级网站| 国产精品乱人伦中文| 在线观看日韩精品| 久久―日本道色综合久久| 久久精品国产精品亚洲| 国产精品一香蕉国产线看观看 | 久久综合中文色婷婷| 亚洲淫片在线视频| 欧美精品成人一区二区在线观看| 欧美α欧美αv大片| 在线观看亚洲视频啊啊啊啊| 亚洲网站在线| 亚洲女女女同性video| 国产精品qvod| 亚洲一区亚洲二区| 欧美亚洲一区二区在线观看| 国产精品老女人精品视频| 亚洲国产1区| 亚洲一区制服诱惑| 国产精品久久国产精麻豆99网站| 一区二区福利| 午夜精品久久久久99热蜜桃导演| 国产精品白丝av嫩草影院| 宅男噜噜噜66一区二区| 99视频国产精品免费观看| 欧美精品国产| 中国日韩欧美久久久久久久久| 亚洲欧美三级伦理| 国产日产欧美一区| 亚洲影院高清在线| 久久久久国产精品午夜一区| 极品尤物久久久av免费看| 免费亚洲婷婷| 一区二区三区回区在观看免费视频| 亚洲小视频在线观看| 欧美日韩精品| 亚洲欧美日韩区| 欧美本精品男人aⅴ天堂| 亚洲精品中文字幕有码专区| 裸体一区二区| 一本大道久久a久久精二百| 香蕉精品999视频一区二区 | 欧美美女日韩| 久久久久久一区二区三区| 亚洲精品久久久久| 欧美中文字幕在线播放| 在线观看国产精品淫|