Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;读取文本文件时遇到问题_C++_Visual Studio 2010_Text Files_Fstream - Fatal编程技术网

C++ C++;读取文本文件时遇到问题

C++ C++;读取文本文件时遇到问题,c++,visual-studio-2010,text-files,fstream,C++,Visual Studio 2010,Text Files,Fstream,我正试图读取一个文本文件,但什么都没有出来。我觉得它在我的VisualStudio资源文件夹中的链接可能不正确,但如果我双击它,它在VisualStudio中可以正常打开,如果我测试它是否打开或是否良好,它不会遇到任何问题。程序现在编译得很好,但没有输出。没有任何内容打印到我的命令提示符。有什么建议吗 代码 #include <iostream> #include <iomanip> #include <fstream> using namespace std

我正试图读取一个文本文件,但什么都没有出来。我觉得它在我的VisualStudio资源文件夹中的链接可能不正确,但如果我双击它,它在VisualStudio中可以正常打开,如果我测试它是否打开或是否良好,它不会遇到任何问题。程序现在编译得很好,但没有输出。没有任何内容打印到我的命令提示符。有什么建议吗

代码

#include <iostream>
#include <iomanip>
#include <fstream>
using namespace std;

int main()
{
    char str[100];
    ifstream test;
    test.open("test.txt");

    while(test.getline(str, 100, '#'))
    {
        cout << str << endl;
    }

    test.close();
    return 0;
}
This is a test Textfile#Read more lines here#and here

您尝试按名称打开文件而不使用路径,这意味着该文件应位于程序的当前工作目录中

当您从VS IDE运行程序时,当前目录存在问题。默认情况下,VS将运行程序的当前工作目录设置为项目目录
$(ProjectDir)
。但您的测试文件驻留在资源目录中。因此,
open()
函数无法找到它,并且
getline()
立即失败

解决方案很简单-将测试文件复制到项目目录。或者将其复制到目标目录(创建程序
.exe
文件的位置,通常是
$(ProjectDir)\Debug
$(ProjectDir)\Release
)并更改VS IDE中的工作目录设置:
项目->属性->调试->工作目录
,设置为$(TargetDir>)。在这种情况下,它将在IDE和命令行/Windows资源管理器中工作


另一个可能的解决方案是在
open()
调用中设置文件的正确路径。出于测试/教育目的,您可以对其进行硬编码,但实际上这不是一种好的软件开发风格。

不确定这是否有帮助,但我只想打开一个文本文件进行输出,然后将其读回。Visual Studio(2012)似乎使这一点变得困难。我的解决方案如下所示:

#包括
#包括
使用名称空间std;
字符串getFilePath(常量字符串和文件名){
字符串路径=\文件\获取源代码路径,包括文件名
path=path.substr(0,1+path.find\u last\u of('\\');//删除文件名
path+=fileName;//将输入文件添加到path
path=“\\”+路径;
返回路径;
}
无效写文件(常量字符串和路径){
流操作系统{path};

if(!os)您不知道文件是否打开正常?您应该检查返回值。我运行if语句查看它是否打开()并且它输入了条件,因此我假设它打开了它(返回1/true)它刚刚在linux中测试了您的示例,所有的工作都如预期的那样。也许您只需要在VS IDE中的
return 0;
语句中放置一个断点,以查看一些输出,或者添加类似
系统(“暂停”);
cin.get()的内容
返回0之前;
@Agus您是否通过Visual Studio对其进行了测试?我觉得这就是问题所在,除非我的问题是读取字符数组,如下面所述的答案。