如果要将文件截断为零大小,可以fopen
使用以下"w"
标志:
FILE *fh = fopen("file.txt","w");
if (fh != NULL) fclose(fh);
Run Code Online (Sandbox Code Playgroud)
要在标准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
Run Code Online (Sandbox Code Playgroud)
当然,如果您可以访问Win32标头和库(我相信MinGW会为您提供此功能),您可以使用SetEndOfFile()
它,因为它可以使用它,而不必创建新文件然后重命名它.
这意味着使用基于Windows句柄的文件I/O而不是FILE*
基于C 的文件I/O,但是,如果您无论如何都要限制自己,那可能并不重要.另一方面,如果您想要可移植性,则需要基于标准C的解决方案,例如上面的传输/重命名解决方案.