打开文件和判断文件结束的问题
程序心声 2013-03-26 03:06:50 大家好,我有一个读文件方面的问题,挺奇怪的。希望大家帮帮忙。代码如下:
CFileDialog dlg(TRUE, ".txt", NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, "文本文件(*.txt)|*.txt|所有文件 (*.*)|*.*||");
CString m_path;
if(dlg.DoModal()==IDOK)
{
CString m_FilePath = dlg.GetPathName();
m_path = m_FilePath; //将文件的路径放入m_path
UpdateData(FALSE);
}
CFile File;
File.Open(m_path,CFile::modeRead);
......能够打开文件,也能够读取文件内容,没有问题
但我不想用CFile来做,我想用fstream 或ifstream来完成,如果我把以上两行换成fstream 或ifstream来打开文件,就再也成功不了了
以下是替换的代码:
fstream infile;
infile.open(m_path);
if(!infile.is_open()) //总是失败,就没成功过
{
Message("失败");
}else
{
string str;
while(!infile.eof()) //判断流中保存的是不是终结符
{
infile >> str;
if(infile.fail())
{
break;
}else
Message(str);
}
}
infile.close();
infile.clear();
1. 我发现,问题好像是在两个函数的参数上,dlg.GetPathName()所获取的文件路径,格式如:C:\X\XX\XXX.txt,用File.Open(m_path,CFile::modeRead)可以成功,如果我换成infile.open(“C:\\X\\XX\\XXX.txt”)就可以成功,我用m_path就不能成功,为什么啊,难道就是单斜杠和双斜杠的差别,为什么前一个用单斜杠就可以呢?什么时候用双斜杠呢?我又怎么把获取的路径改成双斜杠呢,有什么函数可以转换,我不能用手改吧。这是第一个问题。
2. 我通过fstream来读文件的时候,通过infile.eof()来判断文件是否结束,但是我的测试文件,每次到最后一个数据的时候,最后一个数据还没读出来,就结束了。但我把最后一个数据后,再加几个空格,最后一个数据就能读取了,这是怎么回事,我怎么才能保证最后一个数据一定能读上呢?
我的分数不多,但请大家帮帮忙,谢谢了,回答的时候,请说清楚是第几个问题,不只是说怎么改,把原因也最好解答一下,我在线等,请大家踊跃发言,我要的很急啊,现在就卡在这了,感谢啊。