答案 0 :(得分:1)
这应该有效:
#include <stdio.h>
#include <unistd.h>//To use the sleep function under UNIX
int main(void)
{
FILE *f;
int i;
char line[1024];
f = fopen("yourfile", "r");
i = 0;
while(fgets(line, 1024, f) != NULL)
{
//You can use your line here
i++; //'i' is the number of line
}
fclose(f);
sleep(5);//This line may change on windows
f = fopen("yourfile", "r");//Reopen your file after modification
while(i != 0)//We skip the line we already used
{
fgets(line, 1024, f);
i--;
}
while(fgets(line, 1024, f) != NULL)//Here are the new line
{
//You can use your new line here
}
fclose(f);
return 0;
}
答案 1 :(得分:0)
你可以计算你已经读过的行,5秒后你可以从下一行读取。
void GotoLine(std::fstream& file, unsigned int num){
file.seekg(std::ios::beg);
for(int i=0; i < num - 1; ++i){
file.ignore(std::numeric_limits<std::streamsize>::max(),'\n');
}
string line;
file>>line;
cout<<line<<endl; //printing the new line data
}
答案 2 :(得分:0)
在积极写入文件时,有一些点可以帮助读取文件: -
一个小小片段可以为你工作:在这个例子中,我们同时阅读和写作。
read_pos = write_pos = 0;
while ((val1 = fgetc(file_descriptor)) != EOF) {
read_pos = ftell(file_descriptor);
fseek(file_descriptor, write_pos, SEEK_SET);
if (('a' <= val1) && (val1 <= 'z')) {
fputc(val1 - 32, file_descriptor);
} else {
fputc(val1, file_descriptor);
}
write_pos = ftell(file_descriptor);
fseek(file_descriptor, read_pos, SEEK_SET);
}
fclose(file_descriptor);
return (0);
}
}
答案 3 :(得分:0)
使用clearerr()
或fseek()
阅读EOF后,您可以清除错误和EOF指示。然后你必须决定你将如何停止;也许是因为未处理的信号(中断等)。这会产生如下代码:
#include <stdio.h>
#include <unistd.h>
int main(int argc, char **argv)
{
if (argc != 2)
{
fprintf(stderr, "Usage: %s file\n", argv[0]);
return 1;
}
FILE *fp = fopen(argv[1], "r");
if (fp == 0)
{
fprintf(stderr, "%s: failed to open file '%s' for reading\n",
argv[0], argv[1]);
return 1;
}
while (1)
{
char buffer[4096];
while (fgets(buffer, sizeof(buffer), fp) != 0)
fputs(buffer, stdout);
clearerr(fp); // fseek(fp, 0L, SEEK_CUR);
sleep(5);
}
/*NOTREACHED*/
return 0;
}
请注意,我将其写为C代码。但是,它也可以用C ++编译器完全编译(即使设置为繁琐)。
$ g++ -O3 -g -std=c++11 -Wall -Wextra -Werror tf17.cpp -o tf17
$ gcc -O3 -g -std=c11 -Wall -Wextra -Werror tf19.c -o tf19
$
使用名为dribbler
的家庭酿造程序对其进行了测试,该程序将消息缓慢地写入文件。
请注意,如果使用fseek()
清除EOF状态,最好从当前位置(SEEK_CUR
)寻找零字节偏移量。如果您寻求结束,您可能会跳过自程序检测到EOF以来写入的数据。如果文件在您阅读时被截断,您仍可能遇到问题。当前位置可能超出截断文件的末尾。