2009-04-28 103 views
7

我一直在这里关于ifstream的问题,所以我仍然无法阅读简单的文本文件。我与Visual Studio 2008年的工作ifstream :: open在Visual Studio调试模式下不工作

这里是我的代码:

// 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; 
} 

我已经证实,input.txt中文件是正确的“工作目录”通过检查argv[0]值。 Open方法不起作用。

我也遇到了调试问题 - 我不能在infile.good()infile.is_open()上设置手表吗?我不断收到

Error: member function not present. 

编辑:从.cpp文件中完整的代码更新的代码清单。

更新:该文件不在当前工作目录中。这是项目文件所在的目录。将它移到那里,它在VS.NET中调试时工作。

+0

其工作目录是你的问题。当你从命令行运行它时,工作目录是显而易见的。当你在调试器中运行它时,你需要明确地设置工作目录,否则它不是那么明显(检查调试器选项)。 – 2009-04-29 00:41:49

+0

感谢您发布更新部分。自从我需要考虑工作目录处于调试模式的位置以来,这已经过去了一分钟。为我节省了几分钟的头部划伤。 – 2014-06-25 01:55:38

回答

8

尝试在指定打开模式时使用按位或运算符。

infile.open ("input.txt", ios::ate | ios::in); 

openmode参数是一个位掩码。 ios::ate用于打开要附加的文件,而ios::in用于打开文件以进行读取输入。

如果你只是想读取文件,你可能只需要使用:

infile.open ("input.txt", ios::in); 

的默认打开方式为ifstream的是IOS ::中,这样你就可以得到完全摆脱这种现在。以下代码适用于使用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; 
} 
+0

heh。有时候我希望我的代表能够接受别人的答案。 :-) – 2009-04-28 17:11:40

0
infile.open ("input.txt", ios::ate || ios::in); 

||是逻辑或操作,而不是位运算符(如比尔的Lizzard所述)。

,所以我猜你正在做的等价于:

infile.open ("input.txt", true); 

(假设既不是iOS ::吃或iOS ::在0)

0

尝试使用:

ifstream fStm("input.txt", ios::ate | ios::in); 

I'm also having trouble debugging- should I not be able to set a watch on "infile.good()" or "infile.is_open()"? I keep getting "Error: member function not present."

和适当包括:

#include <fstream> 

1

我发现代码中的两个问题:

一)语法错误 “的ios ::吃|| IOS ::在”=>应该是 “IOS ::吃| IOS ::在”

二)“的ios ::吃”光标设置为文件的结尾 - 所以你什么也得不到,当你开始阅读

所以只要去掉“::吃IOS”和你的罚款:)

的Ciao, 克里斯

4

有时,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); 

希望这可以帮助其他人快速解决问题。我花了一段时间才找到这个设置。

相关问题