一个简短的C语言代码,用于删除二进制文件末尾的所有0
时间: 2024-04-30 09:19:44 浏览: 89
以下是一个简单的C语言代码,用于删除二进制文件末尾的所有0:
```c
#include <stdio.h>
#include <stdlib.h>
int main() {
FILE *fp = fopen("file.bin", "rb+");
if (fp == NULL) {
printf("Error opening file\n");
exit(1);
}
fseek(fp, 0, SEEK_END);
long int size = ftell(fp);
fseek(fp, -1, SEEK_END);
while (fgetc(fp) == 0 && size--) {
fseek(fp, -2, SEEK_CUR);
}
ftruncate(fileno(fp), ftell(fp)+1);
fclose(fp);
return 0;
}
```
这段代码打开名为“file.bin”的二进制文件,并在文件末尾查找所有0。然后,它使用`ftruncate()`函数截断文件,以删除所有尾随的0。请注意,这将改变文件的大小,因此请谨慎使用。
相关问题
个简短的C语言代码,用于删除二进制文件末尾的所有0
以下是一个简短的C语言代码,可以删除二进制文件末尾的所有零:
```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("Failed to open file: %s\n", argv[1]);
return 1;
}
fseek(fp, 0, SEEK_END);
long pos = ftell(fp);
char buf;
do {
pos--;
fseek(fp, pos, SEEK_SET);
fread(&buf, 1, 1, fp);
} while (buf == 0 && pos > 0);
if (pos == 0 && buf == 0) {
ftruncate(fileno(fp), 0);
} else {
fseek(fp, pos + 1, SEEK_SET);
ftruncate(fileno(fp), ftell(fp));
}
fclose(fp);
return 0;
}
```
这个程序会以二进制模式打开指定的文件,并从文件末尾开始逐个读入字符,直到遇到一个非零字符为止。然后,它会使用 `ftruncate` 函数将文件截断到最后一个非零字符的位置。如果文件全部都是零,则直接将其截断为零长度。
请注意,这个程序只能删除末尾的零字符,而不能删除中间的零字符。如果需要删除中间的零字符,需要使用更复杂的算法。
个简短的C语言代码,用于删除二进制文件末尾的所有0,不使用ftruncate函数
以下是一个简短的C语言代码,用于删除二进制文件末尾的所有0,不使用ftruncate函数:
```c
#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>
int main(int argc, char *argv[]) {
if (argc != 2) {
printf("Usage: %s <filename>\n", argv[0]);
return 1;
}
int fd = open(argv[1], O_RDWR);
if (fd < 0) {
printf("Error opening file %s\n", argv[1]);
return 1;
}
off_t size = lseek(fd, 0, SEEK_END);
if (size < 0) {
printf("Error getting file size\n");
close(fd);
return 1;
}
unsigned char buf;
off_t pos = size - 1;
int found = 0;
while (pos >= 0) {
if (lseek(fd, pos, SEEK_SET) < 0 || read(fd, &buf, 1) < 0) {
printf("Error reading file\n");
close(fd);
return 1;
}
if (buf == 0) {
found = 1;
} else if (found) {
if (lseek(fd, pos + 1, SEEK_SET) < 0) {
printf("Error seeking file\n");
close(fd);
return 1;
}
if (ftruncate(fd, pos + 1) < 0) {
printf("Error truncating file\n");
close(fd);
return 1;
}
break;
}
pos--;
}
close(fd);
return 0;
}
```
这个代码使用lseek函数获取文件大小,并从文件末尾开始搜索,直到找到一个非零字节。然后使用ftruncate函数截断文件,以删除所有末尾的零字节。如果ftruncate函数不可用,也可以使用lseek函数和write函数重新定位到最后一个非零字节并写入一个null字节以截断文件。
阅读全文