c++ txt 文件读取保存的问题

脱倪粥 2016-10-18 10:57:32
有一个txt文件,保存类型如下:
。。。。。
2424.00
2425.00
2427.00
2425.00
2425.00
2426.00
2426.00

1.如何获得整个txt文件的行数
2.同时保存文件底部最后120行的数据到数组上面

FILE *fp_d;
fp_d = fopen("d.txt", "a+");
if(fp_d == NULL ){
#ifdef DEBUG
printf("Diff file open error! Load holding info failed!\n");
#endif

#ifdef LOG
fprintf(fp_diff,"Diffing file open error! Load holding info failed!\n");
fflush(fp_diff);
#endif
}else
{

fseek(fp_d,8*120,SEEK_END); //把文件内部指针退回到离文件结尾
.。。。。。。。。。。
...全文
312 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
脱倪粥 2016-10-18
  • 打赏
  • 举报
回复
第一问题我找到答案,我是这么写的,不知道有没有问题 int flag_d_n = 0; int Line = 0; do{ flag_d_n=fgetc(fp_d); if (flag_d_n=='\n') Line++; } while(flag_d_n!=EOF); 获取到文件的行数 Line 关于第二个问题, 改成 fseek(fp_d,-8*120,SEEK_END); 为什么是-8*120,能解释下吗? 如果我要获取其中一行或多行的数,该怎么获取? 新手,希望能指点一下,谢谢了~
赵4老师 2016-10-18
  • 打赏
  • 举报
回复
仅供参考:
#include <stdio.h>
FILE *f;
int c;
long offset;
char ln[100];
void main() {
    f=fopen("a.txt","rb");//必须用b方式打开,否则文件当前读位置会受\x0d \x0a \x1a等字符的干扰
    fseek(f,-1,SEEK_END);//倒数最后一个字节之前
    while (1) {
        c=fgetc(f);
        if ('\n'==c) {
            offset=ftell(f);//记住当前位置,即刚读字符后面
            fgets(ln,100,f);
            printf("%s",ln);
            fseek(f,offset-2,SEEK_SET);//回到刚才读位置之前一个位置,即c所在位置之前一个位置
        } else
            if (fseek(f,-2,SEEK_CUR)) {//回到刚才读位置之前一个位置,即c所在位置之前一个位置失败,说明已读到文件开头
                fseek(f,0,SEEK_SET);
                fgets(ln,100,f);//读文件第一行内容
                printf("%s",ln);
                break;
            }
    }
    fclose(f);
}
paschen 版主 2016-10-18
  • 打赏
  • 举报
回复
fseek(fp_d,8*120,SEEK_END); 改成 fseek(fp_d,-8*120,SEEK_END);

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧