零填充:如何从文件末尾删除零?

时间:2013-12-11 09:02:00

标签: c file padding

我需要使用C来实现这个方法(https://en.wikipedia.org/wiki/Padding_%28cryptography%29#PKCS7),这样做没有方便的功能。

我已经添加了这种方式

int main()
{
    FILE *file=fopen("1.xlsx", "a"); 

   file_add(16,file);
   fclose(file);
}
void file_add(int SizeOfBlock, FILE *file )
{
    fseek(file, 0, SEEK_END);
    int size = ftell(file); // file size in bytes
    fseek(file, 0, SEEK_SET);

    int diff = size%SizeOfBlock;

    char arr[16] = "0000000000000000"; //16 zeroes
    fwrite(arr, SizeOfBlock-diff, 1 , file); // here I added to end of file missing 0 to make size of file  be dividing to SizeOfBlock

}


void file_remove (int SizeOfBlock, FILE *file)
{
  // by this function I need to delete these zeroes
  // max amount of zeroes is limited by SizeOfBlock
}

我该怎么做? SizeOfBlock只能是8或16

1 个答案:

答案 0 :(得分:1)

要截断文件,您可以使用以下功能:

#include <unistd.h>
int ftruncate(int fildes, off_t length);
int truncate(const char *path, off_t length);

由于ftruncate使用filedescriptor,您必须使用FILEfileno结构中获取该描述符。

ftruncate(fileno(file), length);

如果您指定的新长度比当前文件长,则文件将增长,这可能有点误导,并且与函数的名称相同。所以它实际上也可以用来使文件更大,用\0填充它。