2013-06-30 90 views
5

在Windows上的Python我可以創建一個大文件增加文件的大小由使用mmap

from mmap import mmap 
    f = open('big.file', 'w') 
    f.close() 
    f = open('big.file', 'r+') 
    m = mmap(f.fileno(), 10**9) 

現在big.file爲(大約)1千兆字節。不過,在Linux上,這將返回ValueError: mmap length is greater than file size

有沒有辦法在Linux上獲得與Windows相同的行爲?也就是說,要能夠使用mmap來增加文件大小?

回答

4

至少在POSIX系統上,mmap()不能用於增加(或減小)文件的大小。 mmap()的功能是對內存映射文件的一部分。這是合乎邏輯的,你要求映射的東西實際上應該存在!坦率地說,我真的很驚訝,你真的可以在MS Windows下做到這一點。

如果你想生長一個文件,只需要ftruncate()它之前你mmap()它。

+0

哦,這很有用,因爲你也可以縮短文件。現在我希望Windows有'ftruncate()'! –

+0

Windows沒有'ftruncate()'?那麼,這也讓我感到驚訝:-)但肯定它必須有一些等效的方法來增長或縮小文件。 – Celada

+0

我應該說,我是基於Python文檔的聲明,而不是任何Windows文檔。 –