我是这个社区的新手,也是iOS开发的新手,我希望有人可以帮我解决一个小问题......
目前我正在为自己编写一个小应用程序,它应该创建一个非常大的虚拟文件,带有虚拟数据或单词或任何它使它变大。
原因是,我想点击一个按钮,应用程序应该生成一个4 GB的文件并将其保存到磁盘,没有其他应用程序可以使用它,因为它不是免费的...如果我需要4 GB可用空间,我只需打开我的小应用程序,点击另一个按钮后,该文件将被删除,我有4 GB的可用磁盘空间......
我知道如何将文件写入磁盘,但我不知道如何在短时间内生成大量数据,使其达到4个或更多gb大???
有人知道如何使用for循环或其他东西生成这么大的文件吗?
答案 0 :(得分:2)
如果你只想占用4GB的磁盘空间,那么创建一个文件,寻求4GB并写一个字节。这将创建一个“稀疏文件”,在接下来的时间内包含几乎没有数据!
这是C:
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
...
int fd = open("/path/to/file", O_WRONLY, 0644);
if (fd >= 0)
{
lseek(fd, 4 * 1024 * 1024 * 1024, SEEK_SET);
write(fd, &fd, 1);
close(fd);
}
编辑删除了creat()
以支持open()
,因此可以指定文件模式。
错误检查也应该比显示的更好......
答案 1 :(得分:1)
您可以创建NSMutableData
对象并使用-setLength:
将其扩展为4GB。 (-setLength
将填入零),然后将其写入文件。
我不确定iOS在处理大型NSMutableData
对象方面有多好。
修改:示例:
NSString *filename; // The location to save your file
NSMutableData *data = [[NSMutableData alloc] init];
[data setLength:4*1024*1024*1024];
[data writeToFile:fileName atomically:NO];
请记住,如果设备的可用存储空间不足,iOS将清除某些目录中的应用数据。
答案 2 :(得分:0)
如果粗略计算1000,而不是1024
4 gb
4000 mb
4000000 kb
4000000000 b
32000000000 bits
确切地说它将是34359738368位
如果你继续将这么多字符(例如b等)写入文本文件,通过循环,你将创建一个4gb的文件。
答案 3 :(得分:0)
你可以用C语言逐步写出来:
// a starting point:
const char path[] = "somewhere";
const size_t NBytesInBuffer = 1024;
/* fill buffer, if you like */
const char buffer[NBytesInBuffer] = {0};
FILE* const file = fopen(path, "w+");
assert(file);
const size_t ElementSize = sizeof(buffer[0]);
uint64_t nBytesWritten = 0;
while (UINT32_MAX > nBytesWritten) {
nBytesWritten += ElementSize * fwrite(buffer, ElementSize, NBytesInBuffer, file);
}
fclose(file);
内存消耗不会成为问题。当然,编写整个文件需要一些时间,因为它是I / O绑定的。有一天你可能会想要一些真实的数据:)
答案 4 :(得分:0)
视窗:
打开命令shell - cmd 执行以下命令以创建1mb
的文件fsutil file createnew ./test.tmp 1048576
Linux的:
使用转换和复制命令 - dd
dd if=/dev/zero of=test.tmp bs=1M count=1
OS X&amp;的Solaris:
mkfile 1m test.tmp