C ++基本文件IO位置

时间:2015-06-18 05:12:07

标签: c++ macos file-io

所以我刚开始学习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;

1 个答案:

答案 0 :(得分:2)

程序尝试在当前工作目录中找到您打开的文件,而不是从可执行文件所在的位置。当您从终端执行程序时,当前目录就是您所在的目录。 cd ~/转到您的主目录,然后运行程序,程序将在您的主目录中查找该文件。如果您更改到其他目录,程序将在该新目录中查找该文件。

自然解决方案是将输入文件作为参数传递给可执行文件,或者将其作为输入请求(我推荐第一个)。