创建一个大的虚拟文件(Creating a large Dummy File)

2019-07-21 04:18发布

我是新来这个社区,并且还新iOS开发,我希望有人能帮助我一点点问题...

目前我正在写自己的一个小应用程序,应会产生一个非常大的虚拟文件,虚拟数据或词或不管它使得大。

究其原因,我想点击一个按钮,该应用程序应该产生一个4 GB的文件并将其保存到磁盘,没有其他应用程序可以使用它,因为它不是免费的...如果我需要4 GB的可用空间,我只是打开我的小应用程序,然后点击另一个按钮后,该文件将被删除,并且我得到了4 GB的磁盘空间免费的...

我知道如何将文件写入到磁盘,但我不知道如何生成在短时间内大量数据,使之4 GB或更多的大???

是否有人有一个想法如何生成一个如此大的文件进行循环或者什么?

Answer 1:

如果你只是想占有的磁盘空间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()这样可以指定文件模式。

此外错误检查应该比显示...



Answer 2:

您可以创建一个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的将清除您的应用程序的数据在某些目录如果设备的可用存储空间不足。



Answer 3:

如果您通过1000,不会做粗略计算1024

 4 gb 
 4000 mb
 4000000 kb 
 4000000000 b 
32000000000 bits

并准确将是34359738368位

如果你去写那么多字(ABC等)到一个文本文件,通过循环,你将创建4GB的文件。



Answer 4:

你可以只写在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瓶颈。 你可能会想在那里有一天,有真实数据,太:)



Answer 5:

视窗:

打开命令外壳 - CMD,以创建一个1MB的文件执行以下命令

fsutil file createnew ./test.tmp 1048576

Linux的:

使用转换和复制命令 - DD

dd if=/dev/zero of=test.tmp bs=1M count=1

OS X和Solaris的:

mkfile 1m test.tmp


文章来源: Creating a large Dummy File
标签: ios file nsdata