用windows.h读取c中的行

时间:2011-03-12 15:24:25

标签: c system-calls

我需要使用windows.h的系统调用来读取我从命令行获取的文件。我可以使用ReadFile()读取整个文件缓冲区,然后在第一个\0处剪切缓冲区,但是如何才能只读取一行?此外,我需要读取文件的最后一行,这是否可能没有将整个文件读入缓冲区,因为可能该文件是4GB或更多,所以我将无法读取它。所以任何人都知道如何通过线条阅读它?

3 个答案:

答案 0 :(得分:1)

如果你知道线路有多长,那么你就可以做一个比最大线稍大的缓冲区。

ReadFile在第一行(\ n)

读取多个字节和剪切缓冲区

使用LZSeek定位到文件末尾,然后向后移动一行字节并查找行尾,从那里开始并读取其余行。

答案 1 :(得分:1)

不要“在第一个\ 0切割缓冲区”,ReadFile不会返回以零结尾的字符串。它读取原始字节。您必须注意通过lpNumberOfBytesRead参数返回的值。它将等于您传递的nNumberOfBytesToRead值,除非您已到达文件的末尾。

现在您知道缓冲区中有多少有效字节。在它们中搜索第一个'\ r'或'\ n'字节以查找行终止符。将字节范围复制到调用者提供的字符串缓冲区并返回。下次读取一行时,从先前离开的位置开始,经过行终止符。如果找不到行终止符,则必须复制缓冲区中的字节并再次调用ReadFile()以读取更多字节。这使得代码在正确的情况下变得有点棘手,否则很好。

答案 2 :(得分:0)

ReadFile对于您想要做的事情来说是一个特别糟糕的选择。你被允许使用fgets吗?在您的情况下,这将更容易使用。