我需要使用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
答案 0 :(得分:1)
要截断文件,您可以使用以下功能:
#include <unistd.h>
int ftruncate(int fildes, off_t length);
int truncate(const char *path, off_t length);
由于ftruncate
使用filedescriptor,您必须使用FILE
从fileno
结构中获取该描述符。
ftruncate(fileno(file), length);
如果您指定的新长度比当前文件长,则文件将增长,这可能有点误导,并且与函数的名称相同。所以它实际上也可以用来使文件更大,用\0
填充它。