c - C中包含哪些空二进制文件
问题描述
#include <stdio.h>
#include <stdlib.h>
int main(void) {
FILE *fp;
fp = fopen("clients.dat", "wb");
fclose(fp);
fp = fopen("clients.dat", "rb");
while (1) {
if (fp == EOF)
break;
else
printf("There is something inside a file");
}
fclose(fp);
return 0;
}
这里有一个问题:空的二进制文件包含什么?指针应该指向EOF
字符吗?我的意思是:文件中的第一件事和最后一件事不是EOF
吗?或者如何检查文件是否为空?
解决方案
空文件不包含任何内容,它是空的。所以它包含0个字节。EOF
不是文件末尾的字符,它是一个整数常量,用作从文件读取的某些标准方法的返回值,以指示文件结束或某种错误。
当你打开一个文件时,你会得到一个指向FILE
类型的指针,即使是一个空文件,这也是你所期望的。
文件的终止方式与字符串的终止方式不同,因此文件中没有等效的NULL
字符来确定文件内容何时停止。
要确定您已打开并具有有效FILE
指针的文件是否为空,您可以使用fseek
and ftell
:
fseek(fp, 0, SEEK_END);
size = ftell(fp);
if (size == 0) {
// File is empty
}
推荐阅读
- jenkins - 将 Jenkins 服务器从 Windows 迁移到 Linux 机器
- c# - 如何使用 api 从 gitlab repo 中提取 LFS 文件
- go - 如何更有效地返回数组
- javascript - Thingworx 甘特图错误为“TypeError:无法读取未定义的属性‘ActualDataRows’”
- javascript - 动态状态没有在反应中更新
- c++ - WMI检测进程创建事件 - C++
- angular - 如何在完全呈现 html 之前更改元素的样式?
- javascript - Angular 2+ 项目中的错误“无法读取未定义的属性‘请求’”
- java - 签名算法的算法约束检查失败:MD5withRSA
- android-studio - 材质 UI 主题