从文件中读取为char数组

时间:2010-06-04 16:18:15

标签: c file arrays 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 */

4 个答案:

答案 0 :(得分:3)

您需要确定文件的大小。完成后,您可以分配足够大的数组并一次性读取它。

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

使用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);
}

答案 1 :(得分:2)

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

在Windows MapViewOfFile下,在unix mmap下。

映射文件(大量示例)后,您将获得指向文件内存开头的指针。将其投放到char[]

答案 2 :(得分:0)

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

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

答案 3 :(得分:0)

使用不同的开放式。即。

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

read语句适用于字节缓冲区。

count = read(fd,buf, bytecount)

这将打开二进制文件并读取文件。