阅读潜在不完整的文件C.

我正在编写一个程序来重新格式化DNS日志文件以插入数据库.当前正在写入日志文件的行可能不完整.如果是的话,我想丢弃它.

我开始相信eof函数可能非常适合我的应用程序,但是我注意到很多程序员都在劝阻使用eof函数.我也注意到feof函数似乎非常相似.

你们可以提供关于这些功能的副作用的任何建议/解释将是最受欢迎的,对于更合适的方法的任何建议也是如此!

编辑:我目前正在使用istream :: peek函数,以跳过最后一行,无论它是否完整.虽然可以接受,但是优选确定最后一行是否完整的解决方案.

我正在使用的具体比较是:logFile.peek()!= EOF

最佳答案 我会考虑使用

int fseek ( FILE * stream, long int offset, int origin );

SEEK_END

然后

long int ftell ( FILE * stream );

确定文件中的字节数,因此 – 结束的位置.我发现这在检测文件结尾时更加可靠(以字节为单位).

你能在文件的最后两三个字节中检测到(记录结束/行结束)EOR标记(可能是CRLF)吗? (3个字节可能用于CRLF ^ Z …取决于文件类型).这将验证您是否有完整的最后一行

fseek (stream, -2,SEEK_END);
fread (2 bytes... etc

如果您尝试使用独占锁打开文件,则可以检测(由于打开失败)文件正在使用中,并在一秒钟内再次尝试…(或每当)

点赞