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

行進中開火

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>
            国产精品久久久久久久免费软件| 欧美国产视频在线观看| 国产精品久久久久久久久久久久久 | 中文欧美日韩| 亚洲欧美在线磁力| 久久精品国产亚洲一区二区三区| 久久国产一区二区三区| 久久久亚洲国产天美传媒修理工 | 欧美激情久久久| 亚洲动漫精品| 亚洲精品永久免费| 亚洲一区二区视频在线观看| 欧美一级在线播放| 免费观看在线综合色| 欧美日韩一区二区在线播放| 欧美午夜精品久久久久久孕妇 | 一个色综合导航| 一二三区精品福利视频| 亚洲男人的天堂在线| 欧美一级视频免费在线观看| 欧美不卡视频一区发布| 国产精品综合色区在线观看| 在线成人激情黄色| 亚洲天堂男人| 欧美大片免费看| 亚洲欧美成人综合| 欧美激情偷拍| 激情av一区| 午夜激情一区| 亚洲精品美女在线观看播放| 久久国产精品99久久久久久老狼| 欧美日韩成人在线| 精品成人一区二区三区| 亚洲一区二区三区中文字幕在线| 久久久xxx| 一区二区三区视频在线观看| 嫩草国产精品入口| 国产中文一区| 亚洲欧美日韩国产综合| 亚洲国产天堂久久综合网| 久久久久久久一区| 国产精品自拍三区| 亚洲一区视频| 亚洲美女视频在线观看| 久久久久久色| 国产一区二区三区久久久久久久久| 亚洲天堂成人在线观看| 亚洲精品国产精品乱码不99按摩 | 国产精品久久久久一区| 一区二区三区国产在线观看| 欧美成人亚洲| 久久久久看片| 影音先锋成人资源站| 久久精品中文字幕一区| 亚洲欧美综合精品久久成人| 国产精品户外野外| 午夜精品久久久久久99热| 99国产精品久久久久老师| 欧美成人tv| 亚洲黄色大片| 亚洲高清一区二| 欧美**人妖| 日韩视频不卡| 一本色道久久| 国产精品网站在线观看| 欧美一区二区| 久久成人资源| 亚洲福利免费| 亚洲国产精品一区二区www| 欧美高清自拍一区| 久久久久www| 一本在线高清不卡dvd| 欧美a级片网| a91a精品视频在线观看| 亚洲毛片在线观看| 国产精品毛片va一区二区三区| 亚洲欧美一区二区在线观看| 亚洲欧美在线观看| 激情文学一区| 亚洲欧洲精品成人久久奇米网| 欧美久久久久久久| 午夜精品成人在线| 久久久久久穴| 在线视频欧美日韩精品| 亚洲欧美制服中文字幕| 亚洲丁香婷深爱综合| 亚洲精品视频在线播放| 国产精品国产三级国产普通话三级| 久久gogo国模啪啪人体图| 狂野欧美激情性xxxx| 亚洲视频观看| 久久久久久久久久久久久9999| 亚洲开发第一视频在线播放| 制服丝袜亚洲播放| 在线电影国产精品| 日韩午夜在线电影| 一区视频在线看| 在线一区二区三区四区五区| 在线播放精品| 亚洲一区二区免费| 亚洲人成网站影音先锋播放| 亚洲综合成人在线| 99这里有精品| 久久免费视频在线观看| 亚洲欧美三级在线| 牛夜精品久久久久久久99黑人 | 欧美激情五月| 国产九九视频一区二区三区| 欧美国产日韩一区二区在线观看| 国产精品视频网址| 亚洲激情婷婷| 尤物99国产成人精品视频| 亚洲图片欧洲图片av| 99这里只有久久精品视频| 久久久久久久激情视频| 欧美一级理论片| 国产精品久久久一区二区| 欧美jjzz| 激情五月婷婷综合| 欧美亚洲视频在线观看| 亚洲一区二区网站| 欧美日韩一区二| 亚洲国产综合91精品麻豆| 亚洲成色www8888| 久久成年人视频| 久久国产黑丝| 国产欧美日韩麻豆91| 亚洲曰本av电影| 亚洲欧美日韩国产中文| 欧美午夜视频一区二区| 99热这里只有精品8| 亚洲视频网站在线观看| 欧美日韩在线视频一区二区| 亚洲国产三级网| 日韩视频一区二区三区在线播放免费观看| 亚洲一区在线观看视频| 亚洲日本中文字幕区| 亚洲黄色免费电影| 麻豆精品视频| 欧美高清不卡| 亚洲精品免费网站| 欧美成人精精品一区二区频| 欧美黄色成人网| 亚洲精品久久久蜜桃 | 亚洲一区图片| 久久国产精品久久精品国产| 国产日韩欧美不卡在线| 久久久91精品国产一区二区精品| 久久精品国产96久久久香蕉| 国产一级一区二区| 另类天堂视频在线观看| 亚洲激情视频在线观看| 夜夜嗨av一区二区三区四季av | 午夜一区二区三视频在线观看| 国产精品视频1区| 久久国产乱子精品免费女| 欧美成人按摩| 亚洲一区二区日本| 国产日韩欧美精品在线| 久久全球大尺度高清视频| 亚洲丰满少妇videoshd| 亚洲一区在线视频| 国产一区二区三区自拍| 免费观看成人鲁鲁鲁鲁鲁视频| 亚洲欧洲日本专区| 欧美亚洲一级片| 亚洲国产裸拍裸体视频在线观看乱了| 欧美国产精品日韩| 亚洲欧美在线一区| 亚洲高清毛片| 久久精品99国产精品日本 | 久久三级视频| 一区二区三区免费在线观看| 国产欧美一区二区三区视频| 女同一区二区| 欧美亚洲自偷自偷| 亚洲乱码国产乱码精品精可以看 | 欧美专区日韩视频| 亚洲人成在线观看| 久久九九精品99国产精品| 日韩一级免费| 伊人成人在线| 国产伦一区二区三区色一情| 欧美成年人视频网站| 午夜在线视频一区二区区别| 亚洲精品一区二区在线| 欧美a级在线| 久久精品国产2020观看福利| 亚洲视频在线观看视频| 91久久综合亚洲鲁鲁五月天| 国产亚洲永久域名| 国产精品久久久久久影视 | 性欧美精品高清| 欧美视频中文字幕| 久久久蜜桃精品| 一区二区三区福利| 亚洲国产小视频| 韩日精品中文字幕| 国产精品永久免费视频| 欧美日韩国产在线看|