当前位置:  开发笔记 > 开发工具 > 正文

截断文件

如何解决《截断文件》经验,为你挑选了2个好方法。

我正在使用fopen fseeko64 ftello64 fclose等来操作文件.

如何截断文件?我知道在C中没有标准的方法可以做到这一点.我想要的是一些适用于任何win32平台的方法.我正在使用mingw gcc进行编译.

请注意:我的意思是将文件的大小截断为指定的大小,而不是将其缩小为0.使用像复制部分到另一个文件和删除/重命名的技巧是不合适的.



1> Adam Davis..:

SetEndOfFile()

获取具有写访问权限的文件句柄,设置文件指针,然后调用SetEndOfFile().

-亚当



2> paxdiablo..:

如果要将文件截断为零大小,可以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的解决方案,例如上面的传输/重命名解决方案.

推荐阅读
k78283381
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有