精华内容
下载资源
问答
  • 我用while,getline的方法一个28kb的c文件,可总是不全,一共360多行的内容只能两百多行,的多了前面的内容就丢失了,这是什么问题?
  • C语言 读文件时多读一次最后一行数据的解决办法 FILE* fp; int n; int t=0; if((fp=fopen("as_uniq_info","r"))==NULL) { printf("Open as_uniq_info fail!\n"); ex

     C语言 读文件时多读一次最后一行数据的解决办法
            FILE* fp;
            int n;
            int t=0;
            if((fp=fopen("as_uniq_info","r"))==NULL)
            {
                 printf("Open as_uniq_info fail!\n");
                    exit(1);
            }
            else{
                 printf("Open as_uniq_info success!\n");
            }
            while(!feof(fp))
            {
    
    
                    fscanf(fp,"%d",&n);
                    if(!feof(fp)){ //加入这行判断,否则会多读一次最后一行
                            g->vexs[t].data = n;
                            t+=1;
                    }
            }
            fclose(fp);

    或者:

    if(!feof(fp)){

        break};

    esle

    {

       g->vexs[t].data = n; t+=1;

    }
    在VC里,只有当文件位置指针(fp->_ptr)到了文件末尾,然后再发生读/写操作时,标志位(fp->_flag)才会被置为含有_IOEOF。然后再调用feof(),才会得到文件结束的信息。
    最后多输出了一次,原因就是在读完最后一个字符后,fp->flag仍然没有被置为_IOEOF,因而feof()仍然没有探测到文件结尾。直到再次fgets执行读操作,feof()才能探测到文件结尾。这样就多输出了一个-1(即FFFFFFFF)。
    用EOF来代替吗?

    	while(feof(fp) != EOF)

    还是不行!因为fgets返回-1时,有两种情况:读到文件结尾或是读取错误。因此我们无法确信文件已经结束, 因为可能是读取错误!  


    feof()的实现与平台有关。

    在stdio.h中feof的定义:
    #define _IOEOF 0x0010
    #define feof(_stream) ((_stream)->_flag & _IOEOF)

    由此可知,只有当fp->_flag & 0x0010为真时,才认为文件结束了。在VC里,只有当file position indicator(在Windows上是fp->_ptr)到了文件末尾,然后再发生读/写操作时,fp->_flag才会被置为含有 _IOEOF,然后再调用feof(),才会得到文件结束的信息。并不是file position indicator一指到文件尾,feof()就认为文件结束。


    参考1:http://topic.csdn.net/u/20080801/17/bc63af1a-6610-433c-8fbd-df37e774f4b3.html

    参考2:http://www.myexception.cn/c/262223.html




    展开全文
  • 下面是txt文档中的一段内容,我想把它出来。

    下面是txt文档中的一段内容,我想把它读取:


    代码如下:


    读取之后黑窗口里面能够看到成功了:

    代码里面的文件路径我写的是char *filename = "C:/Users/SKS/Desktop/1.txt";,大家可以根据需要自行修改,文件名1.txt换成你要读的文件名字就可以了。读的时候用了系统函数sleep()括号里面数字可以代表时间毫秒,我用的是10,可以以一定的速度读出来,不快不慢,很有感觉,有兴趣的同学尝试下还是很有意思的。

    展开全文
  • 问题:fread读取文件返回的长度比实际读取的要少很多,文件大小5M,以“r”模式fopen,读取10000个字节,返回长度0x301(769),实际读取了2400(0x960)个字节; 如下图: 解决方法:将fopen的模式改为 FILE* ...

    问题: fread读取文件返回的长度比实际读取的要少很多,文件大小5M,以“r”模式fopen,读取10000个字节,返回长度0x301(769),实际读取了2400(0x960)个字节;
    如下图:

    解决方法:将fopen的模式改为  FILE* pFileRead = fopen(filename, "rb+");//二进制读取,如果只是r ,读取出来的数据会错误,20191014.
    就能完整的读取整个数据;

    分析可能原因: (具体原因还不确定,有读者知道,请告知,谢谢)
    1、如果按“文本模式”打开一个文件,那么在读入的时候,Windows默认的换行符CR+LF就会转换成一个单个的LF
    2、编码问题? 文件本身是个加密文件,没有明显编码标志。


    拓展读取模式相关
    mode 有下列几种形态字符串:

    • r 以只读方式打开文件,该文件必须存在
    • r+ 以可读写方式打开文件,该文件必须存在。
    • rb+ 读写打开一个二进制文件,允许读数据。
    • rw+ 读写打开一个文本文件,允许读和写。
    • w 打开只写文件,若文件存在则文件长度清为0,即该文件内容会消失。若文件不存在则建立该文件。
    • w+ 打开可读写文件,若文件存在则文件长度清为零,即该文件内容会消失。若文件不存在则建立该文件。
    • a 以附加的方式打开只写文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾,即文件原先的内容会被保留。(EOF符保留)
    • a+ 以附加方式打开可读写的文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾后,即文件原先的内容会被保留。 (原来的EOF符不保留)
    • wb 只写打开或新建一个二进制文件;只允许写数据。
    • wb+ 读写打开或建立一个二进制文件,允许读和写。
    • ab+ 读写打开一个二进制文件,允许读或在文件末追加数据。
    • at+ 打开一个叫string的文件,a表示append,就是说写入处理的时候是接着原来文件已有内容写入,不是从头写入覆盖掉,t表示打开文件的类型是文本文件,+号表示对文件既可以读也可以写。

    上述的形态字符串都可以再加一个b字符,如rb、w+b或ab+等组合,加入b 字符用来告诉函数库以二进制模式打开文件。如果不加b,表示默认加了t,即rt,wt,其中t表示以文本模式打开文件。由fopen()所建立的新文件会具有S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH(0666)权限,此文件权限也会参考umask 值。

    有些C编译系统可能不完全提供所有这些功能,有的C版本不用"r+","w+","a+",而用"rw","wr","ar"等,读者注意所用系统的规定。

    二进制和文本模式的区别

    1.在windows系统中,文本模式下,文件以"\r\n"代表换行。若以文本模式打开文件,并用fputs等函数写入换行符"\n"时,函数会自动在"\n"前面加上"\r"。即实际写入文件的是"\r\n" 。

    2.在类Unix/Linux系统中文本模式下,文件以"\n"代表换行。所以Linux系统中在文本模式和二进制模式下并无区别

    结论:还是TMD 二进制靠谱

     

    展开全文
  • C语言读文件中的TXT数据

    千次阅读 2010-10-22 16:45:00
    读文件中的TXT数据:#include #include void main(){ FILE* EMFile = fopen("D://EMFile.TXT","r"); if (!EMFile) { cout return; } int XN=2;//假设文件有两行,三列 int YN=3; float** Ef; Ef = new ...

    读文件中的TXT数据:

     

     

    #include <stdio.h>
    #include <iostream.h>

    void main()
    {
     FILE* EMFile = fopen("D://EMFile.TXT","r");
     if (!EMFile) {
      cout<<"FILE NOT FOUND!";
      return;
     }

     int XN=2;//假设文件有两行,三列
     int YN=3;
     float** Ef;

     Ef = new float*[XN];
     for(int idx=0;idx<XN;idx++)
     {
      Ef[idx] = new float [YN];
     }
     for(int i=0;i<XN;i++)
     {
      for(int j=0;j<YN;j++)
       Ef[i][j] = 0.0 ;
     }

     for(int xn=0;xn<XN;xn++)
     {
      for(int yn=0;yn<YN;yn++)
      {
       fscanf(EMFile,"%f",&Ef[xn][yn]);//假如是科学计数法写成%e或者%le
     }
     }
    }
      

    展开全文
  • 本程序使用c语言读特定文件并在终端输出,同时具有删除注释功能,使用者可根据自身需要进行修改
  • C语言读bin文件内容

    千次阅读 2020-07-20 18:50:35
    C语言读bin文件内容 一、直接上代码,我这里是读显示器edid的内容,read_bin_file.c #include<stdio.h> #include<string.h> #include"edid.h" typedef unsigned char u8; typedef unsigned long ...
  • C语言文件读操作

    2017-03-03 08:29:26
    C语言文件读操作,通过输入输出流进行文件操作// FileReadWrite.cpp  // C语言文件读操作  // Created by Coral on 2017/3/3.  // Copyright © 2017年 Croal. All rights reserved.  //  //...
  • C语言程序开发中,也会遇到很多文件上传,文件写入等对于文件的操作业务需要开发,文件处理也是任何应用程序的重要组成部分。...本文主要介绍C语言 File文件操作读文件。 原文地址:C语言 File文件处理 读文件 ...
  • C语言文件的操作

    万次阅读 多人点赞 2018-12-18 23:24:05
    前言在谭浩强的C语言设计的第10张讲了有关文件的知识, 以往我们写的C程序的数据都是由键盘输入的 现在我们要对文件进行操作。 文件是操作系统的基本单位。是我们专业领域的重要的一部分。 就拿我们的编译器来说...
  • C语言读CSV文件问题

    千次阅读 2010-08-04 23:23:00
    http://zhidao.baidu.com/question/63460919
  • #include <stdio.h> #include <stdlib.h> #include <string.h> #define MAX_LINE 1024 ... /*文件指针*/ int len; /*行字符个数*/ // if((fp = fopen("test.txt","r")) == N
  • c c++ c语言遍历文件夹 c语言读文件 c语言写文件 高效算法
  • C语言读书笔记

    千次阅读 2017-09-27 14:29:05
    C语言深度解剖读书笔记 前段时间把c语言程序设计看了一遍,感觉还是有很多不清楚的地方,可能是使用的不多,而且学的也不够深得缘故吧。因为平时从事android开发,也希望能够把android系统方面的东西搞懂,那么...
  • 关于C语言读取文件时候多一行

    千次阅读 2019-03-12 16:17:08
    关于C语言读取文件时候多一行 梗概:为什么C语言读取文件到结构体时为什么整天多一行?一切都是【!feof(fp)】的错!!! while (!feof(fp)) { fgets(buffer, 256, fp); j++; } 像这样的代码,是很多...
  • C语言读写文件

    千次阅读 2014-03-14 12:41:19
    C语言库函数包括文件的打开、关闭、、写、 定位等各种操作 要操作文件,首先要声明一个文件指针变量FILE* fp; 打开文件 调用fopen打开文件 文件指针名=fopen(文件名,使用文件方式); PS:这里文件路径...
  • C语言 /写.csv文件

    2020-06-17 15:46:42
    //istringstream提供 string 的功能 iss.str(line);//将 string 类型的 test 复制给 iss,返回 void string s; double x, y, z; iss >> x >> y >> z;//将读入的一行中的三个整数存储到了a, b, c中。 cout ; /*每一...
  • C语言获取文件大小

    万次阅读 多人点赞 2014-05-27 15:09:07
    C语言是一种比较底层的语言,有时在其他语言中很容易操作的事情,在C语言中就比较麻烦,例如获取一个文件的大小。Java中File类有个length函数,Python中os.path包中有个getsize函数,C语言中却没有直接对应的函数...
  • c c++ c语言遍历文件夹 c语言读文件 c语言写文件
  • 按行读取文件,分别获得文件中的每一行。2.读取文件中的每一个字符并写入字符串数组。 1.按行读取文件,分别获得文件中的每一行。 char Buffer[100]; fp = fopen (“filename”, “r”); while(fgets(Buffer,sizeof...
  • C语言文件读写(1)-文本文件读操作

    万次阅读 多人点赞 2020-06-30 12:40:09
    C语言文件读写-之文本文件读写
  • C语言文件

    2020-04-03 09:59:23
    C语言中提供了丰富的系统文件,也可称为库文件。C 语言的库文件分为两类,第一类是扩展名为".h" 的头文件,包含常量定 义、 类型定义、宏定义、函数原型以及各种编译选择设置等信息,第二类是函数库,包括了各种...
  • c语言读取文件信息 c语言读取文件信息 LINUX LINUX
  • C语言文本文件实现局部修改

    万次阅读 多人点赞 2018-06-17 13:23:59
    前言:以往进行文件操作时,都是以链表(变量)作为用户所见数据与文件数据之间的...但是在控制台程序中,没有C语言做不到的事,只有C语言不擅长的事。下面介绍一下文本文件的局部修改(覆盖写入)。当然,不进行覆盖...
  • C语言详解 FILE文件操作

    万次阅读 多人点赞 2018-07-20 09:00:53
    进行C语言文件的存取时,都会先进行“打开文件”操作,这个操作就是在打开数据流,而“关闭文件”操作就是关闭数据流。 1.2 缓冲区(Buffer): 指在程序执行时,所提供的额外内存,可用来暂时存放做准备执行的数据...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 124,224
精华内容 49,689
关键字:

c语言读文件

c语言 订阅