2013-06-30 43 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文档。 –