如何从文件中读取最后一行?

时间:2011-03-14 19:37:53

标签: c windows

我正在创建一个应用程序,它必须从文本文件中获取一些数据。问题是,我需要的数据是文本文件中的最后一行。有没有办法以某种方式阅读最后一行?我只需要最后一行内容。有人能帮助我吗?

由于

2 个答案:

答案 0 :(得分:1)

这是一个快速而又脏的代码。它读取所有行以获取所有行的数量,将文件倒回到开头并再次读取行直到最后两行。最后读取最后一行但存储在变量lastLineButOne中。

#include <stdio.h>
#define BUF 255

int getNoOfLines(FILE *f) {
    int ctr=0;
    char temp[BUF];
    while(fgets(temp,BUF,f) != NULL)
        ctr++;
    return ctr;
}

int main() {
    int i;
    FILE *f=fopen("apps.txt","r");
    char lastLineButOne[BUF];
    char temp[BUF];
    int noOfLines=getNoOfLines(f);
    rewind(f);
    for(i = 0; i < noOfLines-2; i++) {
        fgets(temp,BUF,f);
    }
    fgets(lastLineButOne,BUF,f);
    printf("%s",lastLineButOne);
    fclose(f);
    return 0;
}

答案 1 :(得分:1)

读取整个文件,保留两行,然后丢弃最后一行,例如:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int secondtolast(char *dst, size_t maxlen, FILE *h) {
  char *line[2];
  int i = 0;

  line[0] = malloc(maxlen);
  if (!line[0]) return 1;
  *line[0] = 0;
  line[1] = malloc(maxlen);
  if (!line[1]) {
      free(line[0]); /* return memory to the OS */
      return 1;
  }
  *line[1] = 0;

  while (fgets(line[i], maxlen, h)) i = !i;
  strcpy(dst, line[i]);

  free(line[0]);
  free(line[1]);

  return 0;
}

int main(void) {
  char l2[8192];
  if (secondtolast(l2, sizeof l2, stdin)) {
    fprintf(stderr, "no memory");
  }
  printf("second to last line: %s", l2);
  return 0;
}