所以我正在开发一个类的程序,我们必须打开两个不同的文本文件来检索要在控制台中显示的相应文本。我的代码没有打开文件并继续输出else语句“.txt文件无法打开”。我已经尝试了几种不同的方法来打开文件,但没有运气。非常感谢任何帮助。
//
// main.cpp
// PunchLine program
// Page 896 Problem 3
//
//
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
int main()
{
//File stream objects
fstream inFile;
string line;
//Open joke file to read lines to console
inFile.open("joke.txt", ios::in);
if (inFile.is_open())
{
//Read lines from file to console
while (getline(inFile, line))
{
cout << line << endl;
inFile.close();
}
}
else
cout << "joke.txt file cannot be open.\n";
//Open punchline file to read last line joke to console
inFile.open("punchline.txt", ios::in);
if (inFile.is_open())
{
//Read last line from file to console
inFile.seekp(-52L, ios::end);
getline(inFile, line);
}
else
cout << "punchline.txt file cannot be open.\n";
return 0;
}
答案 0 :(得分:2)
声明输入文件时使用 ifstream inFile; 还要确保输入文件与.exe
位于同一文件夹中编辑:http://www.cplusplus.com/doc/tutorial/files/,此链接应该有助于处理文件。
编辑2:我已经在评论中发布了这个,但我只是将它添加到正式答案:“也改变你的while循环。而不是if测试,使用while(inFile.is_open())和然后在循环中使用你的getline语句。因为现在你的代码读起来就像从文件中得到这一行是真的cout line。所以它甚至可能都没有做while循环。“
答案 1 :(得分:1)
我认为你不应该关闭while循环中的文件。否则,只有在读入第一行后才会关闭文件。将close语句移到循环外部。第二个街区相同。
if (inFile.is_open())
{
//Read lines from file to console
while (getline(inFile, line))
{
cout << line << endl;
}
inFile.close();
}
else
cout << "joke.txt file cannot be open.\n";
答案 2 :(得分:0)
检查您的文件是否存在。如果是,请检查打开时是否有正确的路径(检查.txt文件是否与.exe文件位于同一目录中,或指定代码中的完整路径)。如果是,请检查文件是否为只读。
答案 3 :(得分:0)
使用
if(!infile)
{
cout<<"cannot open file";
}
答案 4 :(得分:0)
我认为你需要刷新屏幕。一旦你刷新并关闭了流。下次运行应用程序时,应该打开该文件。
e.g.
inFile.flush();
inFile.close();