【发布时间】:2013-05-13 10:26:42
【问题描述】:
我正在尝试使用 C 代码生成大文件 (4-8 GB)。
现在我使用fopen() 和'wb' 参数打开文件二进制文件,并在for 循环中使用fwrite() 函数将字节写入文件。我在每次循环迭代中写一个字节。在文件大于或等于 4294967296 字节 (4096 MB) 之前没有问题。它看起来像 32 位操作系统中的一些内存限制,因为当它写入打开的文件时,它仍然在 RAM 中。我对吗?症状是创建的文件比我想要的要小。差异为 4096 MB,例如当我想要 6000 MB 的文件时,它会创建 6000 MB - 4096 MB = 1904 MB 的文件。
您能建议其他方法来完成这项任务吗?
问候:)
部分代码:
unsigned long long int number_of_data = (unsigned int)atoi(argv[1])*1024*1024; //MB
char x[1]={atoi(argv[2])};
fp=fopen(strcat(argv[3],".bin"),"wb");
for(i=0;i<number_of_data;i++) {
fwrite(x, sizeof(x[0]), sizeof(x[0]), fp);
}
fclose(fp);
【问题讨论】:
-
strcat(argv[3],".bin")错 -
为什么投反对票?这是一个很好的问题。
-
无法保证可以绑定到“.bin”的区域已准备好。它可能已经破坏了程序。
-
你使用哪个操作系统和哪个文件系统?
-
@RaphaelAhrens 我使用的是 Windows 7 32 位和 NTFS 分区。