从文本文件中删除最后10个字符

时间:2009-08-13 09:51:26

标签: c

有没有办法从文本文件中删除最后10个字符?

由于

2 个答案:

答案 0 :(得分:9)

对于POSIX平台上的单字节编码,您可以使用类似的内容(省略错误处理):

FILE *file = fopen("filename", "a");
fseek(file, -10, SEEK_END);
ftruncate(fileno(file), ftell(file));    // POSIX function

对于具有可变长度字符的编码,例如UTF-8和UTF-16,它不起作用。

答案 1 :(得分:3)

对于可以在Windows下工作的东西,你也可以这样做:

FILE* pFileIn    = fopen( "filenameIn", "rb" );
FILE* pFileOut   = fopen( "filenameOut", "w+b" );

fseek( pFileIn, -10, SEEK_END );
long length    = ftell( pFile );

long blockSize = 16384;
void* pBlock   = malloc( blockSize );
long dataLeft  = length;
while( dataLeft > 0 )
{
   long toCopy = (dataLeft > blockSize) ? blockSize : dataLeft;

   fread( pBlock, toCopy, 1, pFileIn );
   fwrite( pBlock, toCopy, 1, pFileOut );

   dataLef     -= toCopy;
}

free( pBlock );

fclose( pFileIn );
fclose( pFileOut );