0

我正在写一个比例计算器。在程序开始时,它从同一文件夹中的 .txt 加载一个 ascii 文本艺术图片。

这是我的做法:

//Read picture
string line;
ifstream myfile("/Users/MYNAME/Desktop/MathScripts/Proportions/Value Finder/picture.txt");
if (myfile.is_open()) {
  while (!myfile.eof()) {
    getline(myfile, line);
    cout << line << endl;
  }
  myfile.close();
} else cout << "Unable to load picture!!!" << endl;
//Finish reading txt

我听说如果 .txt 在同一个文件夹中,您可以只使用名称而不必说目录。代替的意思

/Users/MYNAME/Desktop/MathScripts/Proportions/Value Finder/picture.txt

我可以只使用“picture.txt”。这对我不起作用,我希望用户能够在“Value Finder”文件夹中移动而无需编辑任何代码。

我在Mac上,我正在使用CodeRunner;有什么奇怪的吗?

请不要告诉我要确保 picture.txt 与我的代码在同一个文件夹中。这是。

4

1 回答 1

1

为了在picture.txt不使用完全限定路径的情况下打开它,它必须驻留在当前工作目录中。当 IDE 启动应用程序时,它会将当前工作目录设置为应用程序所在的目录。如果与应用程序位于picture.txt不同的目录中,您将无法仅使用其名称打开它。如果您需要获取当前工作目录,可以getcwd这样调用。

char temp[MAXPATHLEN];
getcwd(temp, MAXPATHLEN);

如果你想让用户指定哪个目录picture.txt在你可以让他们在命令行上传递一个参数。然后,您可以使用提供的目录和图片文件名创建一个完全限定的路径。

int main(int argc, const char **argv)
{
    // Add some logic to see if the user passes a path as an argument
    // and grab it. here we just assume it was passed on the command line.
    const string user_path = arg[1];

    //Read picture
    string line;
    ifstream myfile(user_path + "/picture.txt");
    if (myfile.is_open())
    {
        while (!myfile.eof()) {
            getline(myfile, line);
            cout << line << endl;
        }
        myfile.close();
    }
    else
    {
        cout << "Unable to load picture!!!" << endl;
    }
    //Finish reading txt

    return 0;
}

现在您可以执行以下操作:

myapp "/user/USERNAME/Desktop/MathScripts/Proportions/Value Finder"

它将在该目录中查找该picture.txt文件。(因为路径名中有空格,所以需要引号)。

注意:您可以调用setcwd()更改应用程序的当前工作目录。

于 2013-04-20T19:37:56.963 回答