在C中填充磁盘空闲空间的最快方法是什么?

时间:2014-11-28 19:54:45

标签: c fopen fwrite

我需要一种方法来填充带有零的驱动器上的剩余可用磁盘空间(零空闲速度,以便虚拟硬盘不占用无用数据的空间)。

我想要速度,因为要填充的空间可以是几GB大,我需要使用最小的内存占用,因为这将用于" vintage" (想想486用4MB RAM)环境。

我正在考虑使用fopen创建一个文件并用fwrite填充零,最后删除该文件,但它似乎不是最佳...

我不习惯使用遗物编译器(Borland Turbo C 2.01)编写纯C和我。这只是一个有趣的项目,可以更好地理解C,同时为我的文件MS-DOS(虚拟)环境创建一个小实用程序。

你能否告诉我是否有比使用fwrite更好的方法来实现这一目标?

这是我的代码到目前为止的样子(未经测试):

m = malloc(buffSize);
if (!m) {
    return -4;
}
f = fopen(tempFilename, "wb");
if (!f) {
    free(m);
    return -5;
}
i = buffSize;
while (i--) {
    m[i] = 0;
}
written = buffSize;
while (written) {
    written = fwrite(m, buffSize, 1, f);
}
fclose(f);
free(m);

2 个答案:

答案 0 :(得分:1)

如果你将自己限制在标准C,那么

fwrite可能是写东西的最快方法。确保使用足够大的全零缓冲区(例如至少32K字节)。您可以使用memset清除该缓冲区(或较旧的非标准bzero),也可以使用calloc代替malloc进行分配。

但是,您的Borland Turbo C不是一个非常好的C标准兼容编译器。

为什么不切换到更新的编译器和操作系统(例如最新的Linux和最近的GCC)?

答案 1 :(得分:1)

试试这个(未经测试的)

f = fopen(tempFilename, "wb");
fseek(f, buffSize-1, SEEK_SET);
fputc(0, fp);
fclose(f);