VS2013 处置文件 逐行读取test.log ,文档还没有结束 却跳出了循环
VS2013 处理文件 逐行读取test.log ,文档还没有结束 却跳出了循环
在VS2013 处理文件 ,如下代码,却出现文档还没有结束 却跳出了循环 ,原文档200行,只读了120行就结束了,
显示结束行如

在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 *
------解决方案--------------------
使用正确的编码,中文字符可能被当成EOF了。
------解决方案--------------------
先找到问题, 不要着急找解决方案。
------解决方案--------------------
直接去掉if (!readfile.eof())试试,试试吧。嘿嘿
------解决方案--------------------
有两种可能1、 getline用错了,可以用readfile.getline(...)试试
2、strline分配的不够大,溢出了。
------解决方案--------------------
参考这个:
在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;
}
}
显示结束行如
在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 *
------解决方案--------------------
使用正确的编码,中文字符可能被当成EOF了。
------解决方案--------------------
摒弃fstream
使用FILE *
好吧 我试试 谢谢![]()
先找到问题, 不要着急找解决方案。
------解决方案--------------------
直接去掉if (!readfile.eof())试试,试试吧。嘿嘿
------解决方案--------------------
有两种可能1、 getline用错了,可以用readfile.getline(...)试试
2、strline分配的不够大,溢出了。
------解决方案--------------------
#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>
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;
}