(我对C btw还是很陌生,但是在来到这里之前我已经看过了,而且我只看到了有关在文本文件中查找特定字符串的问题)
void *readFile() {
FILE* myFile;
myFile = fopen ("SampleFile.txt","r");
char line[150];
while(!feof(myFile)) {
fgets(line, 150, myFile);
puts(line);
}
fclose(myFile);
return NULL;
}
我知道这会读取并打印整个文件,但是有什么办法可以让我只读取文件的前半部分或后半部分?
答案 0 :(得分:0)
首先,您必须知道文件中总行的大小。您可以通过添加和 count 来做到这一点,然后在每行之后增加它。之后,将循环条件调整为 for(int i = 0; i
答案 1 :(得分:0)
如果您确实不想读取文件的另一半,则除非您知道文件的大小,否则无法这样做。其他答案建议您通过读取所有文件并计算行数来获取大小,如果可以的话,这很好,就像处理小文件一样。
如果您有数十亿行的文件,则不希望这样做。在这种情况下,唯一的选择是使用某些操作系统功能来获取文件的大小。但这通常只会给您文件的大小,而不是行数,因此您实际上并不知道在哪里停止/开始。
答案 2 :(得分:0)
是否可以创建一个读取一半文本文件的函数...?
要读取文件的一半,请读取一个字节-跳过一个字节。
int ch;
while((ch = fgetc(myFile)) != EOF) {
putchar(ch);
fseek(myFile, 1, SEEK_CUR);
}
要打印每隔一行,请使用返回值fgets()
并切换标志print
。
bool print = true;
while(fgets(line, sizeof line, myFile)) {
if (print) {
fputs(line, stdout);
}
print = !print;
}
...有什么方法可以让我读取文件的前半部分或后半部分?
Awww,在帖子的结尾中添加该条件看起来并不有趣。
首次查找文件长度:
How can I get a file's size
How do you determine the size of a file
在Linux上,我将使用stat64();
long size = foo(); // from one of above 3 ideas
要阅读上半部分:
rewind(myFile);
int ch;
while(size-- > 0 && (ch = fgetc(myFile)) != EOF) {
putchar(ch);
}
要阅读第二部分:
fseek(myFile, size/2, SEEK_SET);
int ch;
while((ch = fgetc(myFile)) != EOF) {
putchar(ch);
}
在这里打印上半部是一个有趣的主意,只需编写一些队列函数即可。
queue *q = q_init();
int ch;
// Read 2 bytes, save, write earliest byte
while((ch = fgetc(myFile)) != EOF) {
q_append(q, ch);
ch = fgetc(myFile);
if (ch != EOF) q_append(q, ch);
ch = q_get(q);
putchar(ch);
}
q = q_uninit(q);