VS2013 处置文件 逐行读取test.log ,文档还没有结束 却跳出了循环

VS2013 处理文件 逐行读取test.log ,文档还没有结束 却跳出了循环
在VS2013 处理文件 ,如下代码,却出现文档还没有结束 却跳出了循环 ,原文档200行,只读了120行就结束了,
ifstream  readfile("test.log");  //1----读入文件mail2.log
if (!readfile)        //打开文件失败!
{
cout << "Fail to open file in the first  1---!" << endl;
return 1;
}
else
{
int line = 0;
cout << readfile.peek() << endl;
if (!readfile.eof())
{
while (getline(readfile, strLine))//while (getline(readfile, strLine))
{   //判断空行,1-27,修改,空行不处理
if (strLine.size() != 0)
{
line = line + 1;
//cout << "this is the line number" << line << endl;
}

}
cout << strLine << endl;
}
}


显示结束行如
VS2013 处置文件  逐行读取test.log ,文档还没有结束 却跳出了循环
在notepad++下查看的文档,怎么是这种符号?同时在右下角,显示文档是UNIX ANSI 的状态 
------解决方案--------------------
推荐使用WinHex软件查看硬盘或文件或内存中的原始字节内容。

不要把
fopen("...","...");fscanf,fprintf,fclose //读时把\r\n替换成\n,写时把\n替换成\r\n;读到\x1a就设置EOF;读写的内容当字符看待

fopen("...","...b");fread,fwrite,fclose  //不作以上替换,遇到\x1a仍继续读;读写的内容当字节看待
弄混了

------解决方案--------------------
getline最后一行内容打印出来看下,是不是文件结尾的那行
------解决方案--------------------
if (strLine.size() != 0)
这怎么能判断空行呢?再说你对空行的定义是没有字符串?没有可见字符串?空格算不算空行?
------解决方案--------------------
摒弃fstream
使用FILE *
------解决方案--------------------
引用:
Quote: 引用:

getline最后一行内容打印出来看下,是不是文件结尾的那行

我已经打印了,程序中显示的内容,有特殊字符的,不是文章结尾,结尾就200行全部读完了


使用正确的编码,中文字符可能被当成EOF了。
------解决方案--------------------
引用:
Quote: 引用:

摒弃fstream
使用FILE *

好吧 我试试 谢谢VS2013 处置文件  逐行读取test.log ,文档还没有结束 却跳出了循环

先找到问题, 不要着急找解决方案。 
------解决方案--------------------
直接去掉if (!readfile.eof())试试,试试吧。嘿嘿
------解决方案--------------------
有两种可能1、 getline用错了,可以用readfile.getline(...)试试
2、strline分配的不够大,溢出了。
------解决方案--------------------
引用:
Quote: 引用:


#include <stdio.h>
int main() {
    FILE *f;
    static char ln[10000];
    int i;

    if (0==fopen_s(&f,"test.log","rb")) {
        while (1) {
            if (NULL==fgets(ln,10000,f)) break;
            i++;
            printf("%08d: %s",i,ln);
        }
        fclose(f);
    }
    return 0;
}

我使用这个可以实现全部行输出了,非常感谢。
	static char ln[10000];
但是对于预先设定的静态数组大小还是不能保证正确,后面我测试了一个行有60000多个字符的,结果就被分割为了6行,所以我增加大小


引用:
Quote: 引用:


#include <stdio.h>
int main() {
    FILE *f;
    static char ln[10000];
    int i;

    if (0==fopen_s(&f,"test.log","rb")) {
        while (1) {
            if (NULL==fgets(ln,10000,f)) break;
            i++;
            printf("%08d: %s",i,ln);
        }
        fclose(f);
    }
    return 0;
}

我使用这个可以实现全部行输出了,非常感谢。
	static char ln[10000];
但是对于预先设定的静态数组大小还是不能保证正确,后面我测试了一个行有60000多个字符的,结果就被分割为了6行,所以我增加大小

参考这个:
#include <stdio.h>
#include <string.h>
#define MAXLEN 1000
char ln[MAXLEN];
FILE *f;
int i,z;
int b,n,L;
int main(int argc,char **argv) {
    if (argc<2) {
        printf("Usage:%s fullpathfilename.ext\nget total blank/non-blank/total linenumbers.\n",argv[0]);
        return 1;
    }