删除二进制文件末尾的所有0 C语言代码
时间: 2024-05-11 16:19:30 浏览: 18
以下是删除二进制文件末尾所有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”。
相关问题
删除二进制文件末尾的所有0代码 C语言
可以使用以下代码来删除二进制文件末尾的所有0:
```c
#include <stdio.h>
#include <stdlib.h>
int main() {
FILE* fp;
long size;
int c;
// 打开二进制文件
fp = fopen("binary_file.bin", "rb");
if (fp == NULL) {
perror("fopen");
exit(EXIT_FAILURE);
}
// 获取文件大小
fseek(fp, 0L, SEEK_END);
size = ftell(fp);
// 移动文件指针到文件末尾
fseek(fp, -1L, SEEK_END);
// 删除末尾的0
while (ftell(fp) >= 0 && (c = fgetc(fp)) == 0) {
size--;
fseek(fp, -2L, SEEK_CUR);
}
// 截取文件
if (size > 0) {
if (truncate("binary_file.bin", size) == -1) {
perror("truncate");
exit(EXIT_FAILURE);
}
}
// 关闭文件
if (fclose(fp) == EOF) {
perror("fclose");
exit(EXIT_FAILURE);
}
return 0;
}
```
该程序首先打开二进制文件,然后获取文件大小,并将文件指针移动到文件末尾。然后,它从文件末尾开始往前读取每个字节,直到找到第一个非零字节。接下来,它使用 `truncate` 函数截取文件,以删除末尾的所有0。最后,它关闭文件并退出程序。
删除二进制文件末尾的所有0比较短的代码 C语言
以下是一个简短的C语言代码,用于删除二进制文件末尾的所有0:
```c
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[]) {
if (argc != 2) {
printf("Usage: %s <filename>\n", argv[0]);
return 1;
}
FILE *fp = fopen(argv[1], "r+b");
if (fp == NULL) {
printf("Error opening file!\n");
return 1;
}
fseek(fp, 0, SEEK_END);
long pos = ftell(fp);
while (pos >= 0) {
fseek(fp, pos, SEEK_SET);
char c;
fread(&c, sizeof(char), 1, fp);
if (c != 0) {
break;
}
pos--;
}
if (pos >= 0) {
ftruncate(fileno(fp), pos + 1);
}
fclose(fp);
return 0;
}
```
该代码使用了标准的文件操作库,首先打开指定的文件,并将文件指针移动到文件末尾。然后,它从文件末尾开始向前扫描,直到找到一个非零字节为止。最后,它使用 `ftruncate` 函数截断文件,使其长度等于最后一个非零字节的位置加一。
需要注意的是,`ftruncate` 函数在Windows系统上可能不可用,可以使用 `truncate` 函数代替。此外,该代码假设文件是二进制文件,如果是文本文件,可能需要进行一些修改。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)