从文件中读取为 char 数组

Posted

技术标签:

【中文标题】从文件中读取为 char 数组【英文标题】:read from file as char array 【发布时间】:2011-02-27 21:20:56 【问题描述】:

我正在从一个文件中读取,当我阅读时,它会逐行读取并打印出来

我真正想要的是我想要一个 char 数组来保存文件中的所有字符并打印一次,

这是我的代码

if(strcmp(str[0],"@")==0)
        
            FILE *filecomand;
            //char fname[40];
            char line[100];
            int lcount;
            ///* Read in the filename */
            //printf("Enter the name of a ascii file: ");
            //fgets(History.txt, sizeof(fname), stdin);

            /* Open the file.  If NULL is returned there was an error */
            if((filecomand = fopen(str[1], "r")) == NULL) 
            
                    printf("Error Opening File.\n");
                    //exit(1);
            
            lcount=0;
            int i=0;
            while( fgets(line, sizeof(line), filecomand) != NULL ) 
                /* Get each line from the infile */
                    //lcount++;
                    /* print the line number and data */
                    //printf("%s", line);  

            

            fclose(filecomand);  /* Close the file */

【问题讨论】:

重复reading a text file into an array in c 其实我想要的是整个文本文件内容保存在一个char数组中,不用于打印,我想稍后使用数组的char Nadeem,请参阅他链接的已接受答案。这就是你想要的。基本上,bytes char* 就是你所说的数组,你可以用它做任何你想做的事情,直到你释放它。 【参考方案1】:

您需要确定文件的大小。一旦你有了它,你就可以分配一个足够大的数组并一次读取它。

有两种方法可以确定文件的大小。

使用fstat

struct stat stbuffer;
if (fstat(fileno(filecommand), &stbuffer) != -1)

    // file size is in stbuffer.st_size;

使用fseekftell

if (fseek(fp, 0, SEEK_END) == 0)

    long size = ftell(fp)
    if (size != -1)
    
        // succesfully got size
    

    // Go back to start of file
    fseek(fp, 0, SEEK_SET);

【讨论】:

【参考方案2】:

另一种解决方案是将整个文件映射到内存,然后将其视为 char 数组。

windows下MapViewOfFile,unix下mmap。

一旦你映射了文件(大量的例子),你会得到一个指向内存中文件开头的指针。将其投射到char[]

【讨论】:

【参考方案3】:

由于无法假设文件有多大,因此需要确定大小,然后动态分配缓冲区。

我不会发布代码,但这是一般方案。使用 fseek() 导航到文件末尾, ftell() 获取文件大小,再次使用 fseek() 移动文件开头。使用您找到的大小使用 malloc() 分配一个字符缓冲区。使用 fread() 将文件读入缓冲区。当你完成缓冲区后,free() 它。

【讨论】:

【参考方案4】:

使用不同的打开方式。即

fd = open(str[1], O_RDONLY|O_BINARY) /* O_BINARY for MS */

读取语句将用于字节缓冲区。

count = read(fd,buf, bytecount)

这将对文件进行二进制打开和读取。

【讨论】:

以上是关于从文件中读取为 char 数组的主要内容,如果未能解决你的问题,请参考以下文章

如何将 char 数组转换为结构?

mfc CFile 读取内容到char数组的问题?

使用联合将 char 数组读取为 unsigned long int

读取文件时如何将字符串转换为字符数组?

C语言fgets()函数(以指定长度读取文件中的字符,并存入字符数组变量中)

读入字符并创建数组c ++