4

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

代码

#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
4

2 回答 2

10

您尝试在没有路径的情况下按名称打开文件,这意味着该文件应位于程序的当前工作目录中。

当您从 VS IDE 运行程序时,问题出在当前目录。VS 默认将运行程序的当前工作目录设置为项目目录$(ProjectDir)。但是您的测试文件位于资源目​​录中。所以open()函数找不到它并getline()立即失败。

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

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

于 2012-10-22T19:24:40.300 回答
1

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

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

string getFilePath(const string& fileName) {
	string path = __FILE__; //gets source code path, include file name
	path = path.substr(0, 1 + path.find_last_of('\\')); //removes file name
	path += fileName; //adds input file to path
	path = "\\" + path;
	return path;
}

void writeFile(const string& path) {
	ofstream os{ path };
	if (!os) cout << "file create error" << endl;
	for (int i = 0; i < 15; ++i) {
		os << i << endl;
	}
	os.close();
}

void readFile(const string& path) {
	ifstream is{ path };
	if (!is) cout << "file open error" << endl;
	int val = -1;
	while (is >> val) {
		cout << val << endl;
	}
	is.close();
}

int main(int argc, char* argv[]) {
	string path = getFilePath("file.txt");
	cout << "Writing file..." << endl;
	writeFile(path);
	cout << "Reading file..." << endl;
	readFile(path);
	return 0;
}

于 2015-05-06T19:29:49.570 回答