删除一个二进制文件的前四个字节的数据和末尾为0的数据 C语言
时间: 2023-06-18 21:07:19 浏览: 195
可以使用C语言的文件操作函数来实现删除二进制文件的前四个字节和末尾为0的数据。
首先,需要打开要操作的文件,可以使用fopen函数来打开文件。例如:
```c
FILE *fp;
fp = fopen("filename.bin", "rb+");
```
其中,"filename.bin"是要操作的文件名,"rb+"表示以二进制只读/写的方式打开文件。
接下来,可以使用fseek函数将文件指针移动到要删除的数据的位置。例如,删除前四个字节可以使用:
```c
fseek(fp, 4, SEEK_SET); // 将文件指针移动到第4个字节的位置
```
删除末尾为0的数据可以先获取文件大小,然后对文件进行截断。可以使用fseek和ftell函数来获取文件大小,使用ftruncate函数来截断文件。例如:
```c
fseek(fp, 0, SEEK_END); // 将文件指针移动到文件末尾
long int size = ftell(fp); // 获取文件大小
fseek(fp, 0, SEEK_SET); // 将文件指针移回文件开头
while (fgetc(fp) == 0) { // 循环读取末尾为0的数据
size--; // 每读取一个0,文件大小减1
}
ftruncate(fileno(fp), size); // 截断文件
```
最后,需要关闭文件,使用fclose函数即可:
```c
fclose(fp);
```
相关问题
删除一个二进制文件的前四个字节的数据和末尾为0的数据 C语言代码
可以使用以下代码来删除二进制文件的前四个字节和末尾为0的数据:
```c
#include <stdio.h>
#include <stdlib.h>
int main() {
FILE *fp;
char filename[] = "example.bin";
int file_size, i, j = 0;
char *buffer;
// Open binary file
fp = fopen(filename, "rb");
if (fp == NULL) {
printf("Error: failed to open file %s\n", filename);
exit(1);
}
// Get file size
fseek(fp, 0, SEEK_END);
file_size = ftell(fp);
fseek(fp, 0, SEEK_SET);
// Allocate memory for buffer
buffer = (char*) malloc(file_size);
// Read file into buffer
fread(buffer, file_size, 1, fp);
// Close file
fclose(fp);
// Remove first four bytes
for (i = 4; i < file_size; i++) {
buffer[j] = buffer[i];
j++;
}
file_size -= 4;
// Remove trailing zeros
while (buffer[file_size-1] == 0) {
file_size--;
}
// Write buffer to file
fp = fopen(filename, "wb");
if (fp == NULL) {
printf("Error: failed to open file %s for writing\n", filename);
exit(1);
}
fwrite(buffer, file_size, 1, fp);
// Close file and free buffer
fclose(fp);
free(buffer);
printf("Done!\n");
return 0;
}
```
这段代码首先打开一个二进制文件,读取文件的大小,然后分配一个缓冲区来存储文件的内容。接下来,它从缓冲区中删除前四个字节,并从缓冲区的末尾删除所有为0的字节。最后,它将修改后的缓冲区写回原始文件中,并关闭文件和释放缓冲区内存。
删除二进制文件末尾的所有0 C语言代码
以下是删除二进制文件末尾所有0的C语言代码:
```c
#include <stdio.h>
int main() {
FILE *fp = fopen("binary_file.bin", "rb+");
if (fp == NULL) {
printf("Failed to open file.\n");
return 1;
}
fseek(fp, 0, SEEK_END);
long int size = ftell(fp);
fseek(fp, -1, SEEK_CUR);
while (fgetc(fp) == 0 && size-- > 0) {
fseek(fp, -2, SEEK_CUR);
}
size++;
ftruncate(fileno(fp), size);
fclose(fp);
printf("Done.\n");
return 0;
}
```
这段代码打开一个二进制文件,将文件指针移到文件末尾,然后逐个读取字节,如果是0就将指针向前移动一个字节,直到遇到非0字节为止。最后使用ftruncate函数将文件截断到正确的大小,关闭文件并输出“Done”。
阅读全文