C语言如何判断文本文档的结束

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言如何判断文本文档的结束相关的知识,希望对你有一定的参考价值。

我想在文档结束的时候跳出循环,但是用fread和feof好像都没用,指针老是停留在最后一个字符那里,跳不出来(扩展名为dat的输入文档)
我想问一下stream = fopen("f:\\a.txt", "r"); 中的“r”是什么

C语言判断文本文档的结束的源代码如下:

#include <iostream>

#include <fstream>

using namespace std;

#define FILENAME "stat.dat"

int main()

fstream _file;

_file.open(FILENAME,ios::in);

if(!_file)

cout<<FILENAME<<"没有被创建";

else

cout<<FILENAME<<"已经结束";

return 0;

扩展资料

C语言向文件写入内容并读取显示的源代码如下:

#include <stdio.h>

#include <stdlib.h>

#include <errno.h>

#define FILE_PATH "D:/demo.txt"  // 文件路径

int main()

char name[20];  // 姓名

int age;  // 年龄

int studNo;  // 学号

float score;  // 平均分

FILE *fp;  // 文件指针

// 判断文件是否能够正确创建/打开

if( (fp=fopen(FILE_PATH,"wt+")) == NULL )

perror(FILE_PATH);

exit(1);

参考技术A 持续读取字符,直到读函数返回错误,这时进行feof判断,如果为真,则表示文本文档结束。
int feof(FILE *fp);
功能为判断文档是否结束,如果已经达到文件尾,返回1,否则返回0.

除此外,部分读函数本身返回值同样可以判断是否结尾。
1 fgets, 返回NULL表示文件结尾。
2 fscanf, fgets等,返回EOF表示=文件结尾。
参考技术B #include <stdio.h>
int main(void)

FILE *stream;
stream = fopen("f:\\a.txt", "r");
char ch=fgetc(stream);
while (ch!=EOF) //也可以改为:while(!feof(stream))

putchar(ch);
ch=fgetc(stream);

fclose(stream);
return 0;


如果是文本,一般文本文件的结尾是以ascii码25表示的,你读到这个字符,也可以认为文本文件结束了.

eof函数查看最后一次读文件是否为文件的最后一个记录,是,返回非零,否,返回零。eof可以不加括号。

while($line=<FILE>

......
if(eof)
......

本回答被提问者采纳
参考技术C 文件结束用是否读到文件结束符EOF来判断。

fread 用于2进制方式打开文件来读。
fread 不能判断是否读到EOF。
fread 只能判断要求读进的字节数 是否等于 实际读到的字节数。如果不等,知道发生了 读 的错误。

feof 不能预报 “文件已到文件尾,下面将是文件结束符EOF ". 只有当 fgetc 等语句 读入 文件结束符EOF 以后,feof才能报告:“已到文件尾啦”。

fscanf(), fgetc() 等语句能自己知道已到文件尾,并送返EOF,所以很容易判断。

例如循环读,遇到EOF跳出循环体:
while(1==1)

if ( ( gb = fgetc(fin)) == EOF ) goto Lab01;
a[k] = gb;
if ( fscanf(fin, "%s", buff[k]) ==EOF ) goto Lab01;
k++;
;
Lab01: fclose(fin);
参考技术D ifstream ufile("c:\1.txt");
ufile.eof();//结束为1,不结束为0

快速生成较大文本文档的两种方法

 

在学习用FTP发送文件的过程中,需要用到一个比较大的文件进行传输测试。因此百度了一下如何生成指定大小文件的方法,发现在WINDOWS下有两种方法比较实用,记录如下:

第一种方法:

  1. 在运行窗口中输入CMD命令回车,进入命令行模式。
  2. 在此界面下输入:”fsutil file creatnew test.txt 1024”即可产生一个占用空间为1024字节,名为test.txt的文本。

命令中1024即为该文件占用空间大小,可以任意指定。比如输入1048576就可以产生一个1M大小的文件。当然你完全可以指定更大的数值产生10M,100M的文件都没有问题。遗憾的是这种方法生成的文件无论多大,它都是一个空文件。下面还有一种方法可以生成有内容的文件。

第二种方法:

  1. 在任意位置新建一个文件夹。
  2. 在文件夹中新建一个txt文档并打开。在文件中输入以下内容:

@echo off      

for /l %%n in (1,1,1234) do (   

type 1.txt >> 1.doc       

)

  1. 退出并保存该文本文档,并将其后缀名修改为bat
  2. 在该文件中再新建一个名为1的txt文档。
  3. 在该文档中粘帖一定的内容(比如1K字节的文章)并保存退出。
  4. 双击刚才生成的BAT文档。
  5. 此时在该文件夹内就会生成一个较大的doc文档。该文档的最终大小和你最初粘帖在1.txt当中的内容大小和BAT文件中那个循环次数有关。循环次数就是bat文档中的1234。你可以将它修改大小,以获得你希望得到的文件大小

两种方法对比:第一种方法能够迅速得到指定大小的文件,但是文件为空。第二种方法能够得到有内容的大文件。但是文件大小不易精确控制。

以上是关于C语言如何判断文本文档的结束的主要内容,如果未能解决你的问题,请参考以下文章

如何将新建文本文档的编码默认设为UTF-8格式?

在 VSCode 扩展中设置文本文档的语言

Java 把一个文本文档的内容复制到另一个文本文档

更改文本文档默认编码UTF-8转换ANSI?

快速生成较大文本文档的两种方法

将文本文档的内容分门别类,查看部分文本