我已经在这里讨论了ifstream问题,而且我仍然无法阅读简单的文本文件。我正在使用Visual Studio 2008。
这是我的代码:
// CPPFileIO.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include <fstream>
#include <conio.h>
#include <iostream>
#include <string>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
ifstream infile;
infile.open("input.txt", ifstream::in);
if (infile.is_open())
{
while (infile.good())
cout << (char) infile.get();
}
else
{
cout << "Unable to open file.";
}
infile.close();
_getch();
return 0;
}
我已通过检查argv[0]
的值确认 input.txt 文件位于正确的“工作目录”中。 Open方法不起作用。
我也在调试时遇到问题 - 如果我无法在infile.good()
或infile.is_open()
上设置监视?我一直在
Error: member function not present.
编辑:使用.CPP文件中的完整代码更新了代码清单。
更新:该文件不在当前工作目录中。这是项目文件所在的目录。将其移动到那里,在VS.NET中进行调试时可以正常工作。
答案 0 :(得分:8)
在指定打开模式时尝试使用按位OR运算符。
infile.open ("input.txt", ios::ate | ios::in);
openmode参数是位掩码。 ios::ate
用于打开文件以进行追加,ios::in
用于打开文件以读取输入。
如果您只想阅读文件,可以使用:
infile.open ("input.txt", ios::in);
ifstream的默认打开模式是ios :: in,所以你现在可以完全摆脱它。以下代码使用g ++工作。
#include <iostream>
#include <fstream>
#include <cstdio>
using namespace std;
int main(int argc, char** argv) {
ifstream infile;
infile.open ("input.txt");
if (infile)
{
while (infile.good())
cout << (char) infile.get();
}
else
{
cout << "Unable to open file.";
}
infile.close();
getchar();
return 0;
}
答案 1 :(得分:5)
有时,Visual Studio会将您的exe文件从源代码中删除。默认情况下,VS可能只查找从exe文件开始的文件。此过程是一个简单的步骤,用于从与源代码相同的目录中获取输入txt文件。您是否不想修复IDE设置。
using namespace std;
ifstream infile;
string path = __FILE__; //gets source code path, include file name
path = path.substr(0,1+path.find_last_of('\\')); //removes file name
path+= "input.txt"; //adds input file to path
infile.open(path);
希望这可以帮助其他人快速解决问题。我花了一段时间才找到这个设置。
答案 2 :(得分:1)
我在你的代码中发现了两个问题:
a)“ios :: ate || ios :: in”=&gt;中的语法错误应该是“ios :: ate | ios :: in”
b)“ios :: ate”将光标设置为文件末尾 - 所以当你开始阅读时你什么也得不到
所以只需删除“ios :: ate”就可以了。)
侨, 克里斯
答案 3 :(得分:0)
infile.open ("input.txt", ios::ate || ios::in);
||
是逻辑或运算符,而不是按位运算符(正如Bill The Lizzard所说)。
所以我猜你做的相当于:
infile.open ("input.txt", true);
(假设ios :: ate或ios :: in都不是0)
答案 4 :(得分:0)
尝试使用:
ifstream fStm("input.txt", ios::ate | ios::in);
我也在调试时遇到问题 - 如果我无法在“infile.good()”或“infile.is_open()”上设置监视?我不断收到“错误:成员函数不存在。”
正确包括:
#include <fstream>
等