我想将文件的数据读入字符串。
是否有将整个文件读入字符数组的函数?我这样打开文件:
FILE *fp;
for(i = 0; i < filesToRead; i++)
{
fp = fopen(name, "r");
// Read into a char array.
}
编辑:那么如何“逐行”阅读 getchar() ?
我想将文件的数据读入字符串。
是否有将整个文件读入字符数组的函数?我这样打开文件:
FILE *fp;
for(i = 0; i < filesToRead; i++)
{
fp = fopen(name, "r");
// Read into a char array.
}
编辑:那么如何“逐行”阅读 getchar() ?
以下是将整个文件读入连续缓冲区的三种方法:
找出文件长度,然后找出fread()
整个文件。fseek()
您可以使用and计算长度ftell()
,也可以fstat()
在 POSIX 系统上使用。这不适用于套接字或管道,它仅适用于常规文件。
将文件读入一个缓冲区,当您使用fread()
. 典型的实现以“合理的”缓冲区大小开始,每次空间耗尽时将其翻倍。这适用于任何类型的文件。
在 POSIX 上,使用fstat()
获取文件,然后mmap()
将整个文件放入您的地址空间。这仅适用于常规文件。
您可以执行以下操作:
FILE *fp;
int currentBufferSize;
for(i = 0; i < filesToRead; i++)
{
fp = fopen(name, "r");
currentBufferSize = 0;
while(fp != EOF)
fgets(filestring[i], BUFFER_SIZE, fp);
}
当然,您必须以更强大的方式进行此操作,检查您的缓冲区是否可以保存所有数据等等......
您可能会使用类似以下的内容:阅读每一行,仔细检查结果并将其传递给您选择的数据结构。我没有展示如何正确分配内存,但您可以在必要时malloc
提前。realloc
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#define FILE_BUFFER_SIZE 1024
int file_read_line(FILE *fp, char *buffer)
{
// Read the line to buffer
if (fgets(buffer, FILE_BUFFER_SIZE, fp) == NULL)
return -errno;
// Check for End of File
if (feof(fp))
return 0;
return 1;
}
void file_read(FILE *fp)
{
int read;
char buffer[FILE_BUFFER_SIZE];
while (1) {
// Clear buffer for next line
buffer[0] = '\0';
// Read the next line with the appropriate read function
read = file_read_line(fp, buffer);
// file_read_line() returns only negative numbers when an error ocurred
if (read < 0) {
print_fatal_error("failed to read line: %s (%u)\n",
strerror(errno), errno);
exit(EXIT_FAILURE);
}
// Pass the read line `buffer` to whatever you want
// End of File reached
if (read == 0)
break;
}
return;
}