我正在使用fopen fseeko64 ftello64 fclose等来操作文件.
如何截断文件?我知道在C中没有标准的方法可以做到这一点.我想要的是一些适用于任何win32平台的方法.我正在使用mingw gcc进行编译.
请注意:我的意思是将文件的大小截断为指定的大小,而不是将其缩小为0.使用像复制部分到另一个文件和删除/重命名的技巧是不合适的.
SetEndOfFile()
获取具有写访问权限的文件句柄,设置文件指针,然后调用SetEndOfFile().
-亚当
如果要将文件截断为零大小,可以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而不是FILE*
基于C 的文件I/O,但是,如果您无论如何都要限制自己,那可能并不重要.另一方面,如果您想要可移植性,则需要基于标准C的解决方案,例如上面的传输/重命名解决方案.