2 jujiawu1024 jujiawu1024 于 2016.03.05 20:46 提问

VC++ 6.0文本文件分行读取MFC读文件的问题

VC++ 6.0文本文件分行读取,怎么样返回上一行,getline怎么才能往前读取行呢?

4个回答

caozhy
caozhy   Ds   Rxr 2016.03.06 07:28
已采纳

vector string;
ifstream inout;

inout.open(文件名,ios::in);
while(inout.getline(nextline, sizeof(nextline)))
{
temp_str = nextline;
v.pushback(temp_str);
}
inout.close();
inout.clear();
先一次性读取到内存,然后通过下标读取

bealing
bealing   Rxr 2016.03.05 21:24

首先要知道当前行的字符个数x,上一行的字符个数y,然后使用fseek()函数从当前位置往后移动x+y个字符,然后再getline就可以读上一行数据了

WinsenJiansbomber
WinsenJiansbomber   2016.03.05 21:43

缓存读到的内容啊,再取就容易了

baijiaheizhiganmao
baijiaheizhiganmao   2016.03.05 22:58

我想你的思路很乱!
方法一:不管是使用MFC::CFILE 还是C++的fstream去读取文件,其实思路都是一样的。至于你说的读取了一行后返回上一行的问题,我提供的思路如下:
在打开文件后,你每读取一行,就会用一个变量去接受读取到的内容(getline的第二个参数)。比如说while(getline(ifstream fin,string temp)),在这里是temp保存了你的内容。当你读取的是第一行,那上一行的内容肯定是目前读取位置减去temp.length()后的位置,此时为_ios_base::beg(文件起始位置)
;接下来读取的行的时候,你想保存这一次读取到的位置,用一个变量标记,比如说是flag,那么当你读取完这一行,要反会上一行的位置时候,你返回flag

就行了!这里用一个迭代直到读取到文件的末尾,你都可以正确的返回到上一行的位置

方法二:将内容读取到内存中去,比如你用一个vector来保存你读取出来的所有行的内容,vector中的任何一个元素对应一行,然后你
只要像操作数组一样操作vector就行了。

Csdn user default icon
上传中...
上传图片
插入图片