0

我正在阅读一个文本文件并尝试在控制台上显示其内容。这是我的代码:

#include "stdafx.h"
#include <stdio.h>
#include <string.h>
#include <fstream>

int main()
{
    FILE* fp=NULL;
    char buff[100];
    fp=fopen("myfile.txt","r");
    if(fp==NULL)
    {
        printf("Couldn't Open the File!!!\n");
    }
    fseek(fp, 0, SEEK_END);
    size_t file_size = ftell(fp);
    fread(buff,file_size,1,fp);
    printf("Data Read [%s]",buff);
    fclose(fp);
    return 0;
}

但控制台上只显示冗余数据;有人可以指出我的错误吗?

4

5 回答 5

4

执行此操作后,您忘记重置文件指针以启动。

fseek(fp, 0, SEEK_END);

在找到大小 ( file_size) 后执行此操作。

rewind (fp);
于 2013-04-05T06:30:51.567 回答
3

在阅读之前,您需要回到文件的开头:

int main()
{
    FILE* fp=NULL;
    char buff[100];
    fp=fopen("myfile.txt","r");
    if(fp==NULL)
    {
        printf("Couldn't Open the File!!!\n");
        exit(1);                     // <<< handle fopen failure
    }
    fseek(fp, 0, SEEK_END);
    size_t file_size = ftell(fp);
    fseek(fp, 0, SEEK_SET);          // <<< seek to start of file
    fread(buff,file_size,1,fp);
    printf("Data Read [%s]",buff);
    fclose(fp);
    return 0;
}
于 2013-04-05T06:29:55.470 回答
0

尝试一下....

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

void handle_line(char *line) {
printf("%s", line);
}

int main(int argc, char *argv[]) {
int size = 1024, pos;
int c;
char *buffer = (char *)malloc(size);

FILE *f = fopen("myfile.txt", "r");
if(f) {
  do { // read all lines in file
    pos = 0;
    do{ // read one line
      c = fgetc(f);
      if(c != EOF) buffer[pos++] = (char)c;
      if(pos >= size - 1) { // increase buffer length - leave room for 0
        size *=2;
        buffer = (char*)realloc(buffer, size);
      }
    }while(c != EOF && c != '\n');
    buffer[pos] = 0;
    // line is now in buffer
    handle_line(buffer);
  } while(c != EOF); 
  fclose(f);           
}
free(buffer);
return 0;

}

于 2013-04-05T06:32:34.427 回答
0
    #include "stdafx.h"
    #include <stdio.h>
    #include <string.h>
    #include <fstream>

    int main()
    {
        FILE* fp=NULL;
        char *buff;                     //change array to pointer
        fp=fopen("myfile.txt","r");
        if(fp==NULL)
        {
            printf("Couldn't Open the File!!!\n");
        }
        fseek(fp, 0, SEEK_END);
        size_t file_size = ftell(fp);
        buff = malloc(file_size);      //allocating memory needed for reading file data
        fseek(fp,0,SEEK_SET);          //changing fp to point start of file data
        fread(buff,file_size,1,fp);
        printf("Data Read [%s]",buff);
        fclose(fp);
        return 0;
    }
于 2013-04-05T07:23:21.013 回答
0

拥有 100 字节的缓冲区来读取文件并不是一个更好的主意,因为文件大小可能超过 100 字节。

更好的文件 io 可以通过对文件执行 fgets 来完成,如果它不是您想要使用 fread 读取的元数据类型。

while 循环中的 fgets 可用于检查其是否到达 EOF 或 feof 调用可用于检查 EOF。

fgets 的示例代码列表可以是这样的:

 while (fgets(buf, len, fp)) {
      printf("%s", buf);
 }

或者与 fgets 一起使用的示例可以是这样的:

 while (fread(buf, len, 1, fp) >= 0) {
       printf("%s\n", buf);
 }
于 2013-04-05T12:14:22.193 回答