如果您想将文件截断为零大小,可以fopen 使用"w" 标志:
FILE *fh = fopen("file.txt","w");
if (fh != NULL) fclose(fh);
要在标准 C 中截断为特定大小,您可以使用传输/重命名解决方案来执行此操作,例如:
FILE *finp = fopen ("inp.txt", "rb"); // should check for NULLs
FILE *fout = fopen ("out.txt", "wb");
size_t sz = 100000; // 100,000 bytes
char *buff = malloc (sz); // should check for NULL
sz = fread (buff, 1, sz, fin); // should check for errors
fwrite (buff, 1, sz, fout);
free (buff);
fclose (fin);
fclose (fout);
rename ("out.txt", "inp.txt); // should check for error
当然,如果您可以访问 Win32 头文件和库(我相信 MinGW 会为您提供),您可以使用 SetEndOfFile(),因为它可以就地执行,而不必创建一个新文件然后重命名它。
这意味着使用基于 Windows 句柄的文件 I/O 而不是基于 C FILE* 的文件 I/O,但是,如果您仍然将自己限制在 Windows 中,那可能没关系。另一方面,如果您想要可移植性,则需要基于标准 C 的解决方案,例如上面的传输/重命名解决方案。