所以我刚开始学习fileIO
。我一直在我的Mac上使用一个名为CodeRunner的程序,我有一个包含以下内容的文件夹:
validsudoku.cpp, validsudoku, sudokugood0.txt
我写的代码的开头是:
int main(int argc, char const *argv[]){
//string filetoopen;
ifstream sudokutxtfile;
string txtline;
string sudokubox[9];
//bool goodsudoku = true;
//int i, j, row, column;
/*
if (argc == 2)
filetoopen = argv[1];
else
filetoopen = "sudokuboard.txt";
*/
//read in file, save to array, close file
sudokutxtfile.open("sudokugood0.txt");
while (getline(sudokutxtfile,txtline))
{
sudokubox[row] = txtline;
row++;
}
sudokutxtfile.close();
现在要对此进行测试,我只需将文件打开为"sudokugood0.txt"
,但是一旦我开始工作,我就会将其更改为'filetoopen'
变量,以便终端输入文件名。
现在我的问题:
当我在CodeRunner中运行.cpp
时,它正确运行会看到.txt
文件并对其进行处理,但是当我将可执行文件和.txt
文件放入我的bin文件夹并尝试从中运行时终端它没有看到.txt
文件。我使用错误的位置还是我错过了其他的东西?
附带问题:它在OSX中运行,但是在我使用Codeblocks的Xubuntu VMbox中,我需要在课程中使用“分段错误(核心转储)”任何人都知道为什么?我把它放在我文件的顶部:
#include <iostream>
#include <fstream>
#include <sstream>
using namespace std;
答案 0 :(得分:2)
程序尝试在当前工作目录中找到您打开的文件,而不是从可执行文件所在的位置。当您从终端执行程序时,当前目录就是您所在的目录。 cd ~/
转到您的主目录,然后运行程序,程序将在您的主目录中查找该文件。如果您更改到其他目录,程序将在该新目录中查找该文件。
自然解决方案是将输入文件作为参数传递给可执行文件,或者将其作为输入请求(我推荐第一个)。