4

我正在尝试使用 ifstream 处理一些文件。一切似乎都很好,但是当我尝试打开一个文件时它不起作用。无论我尝试输入字符串变量还是名称的字符串文字。我尝试访问的文件与项目位于同一目录中,并且确实包含内容。

该项目不会显示任何错误并且会编译,但它只会说它每次都无法访问该文件。

额外的头文件“simpio.h”和“console.h”只是stanford 提供的库。

#include <iostream>
#include "console.h"
#include "simpio.h"
#include <fstream>
#include <string>
using namespace std;

int countLines(ifstream & in)
{
    int count = 0;
    while (true) {
        string line;
        getline(in, line);
        if (in.fail()) break;
        count++;
    }
    return count;
}

int main()
{
    ifstream in;
    while (true) {
        cout << "Enter name: ";
        string s = getLine();
        in.open(s.c_str());
        if (!in.fail()) break;
        cout << "Couldn't open file, try again!" << endl;
        in.clear();
    }



    cout << "Num lines = " << countLines(in) << endl;

    return 0;
}

任何帮助都会很棒!谢谢!

4

3 回答 3

3

你有两个选择:

1)使用Objective-C++(删除.m扩展名并用.mm替换它)

2)转到项目设置并添加这些值:

GLIBCXX_DEBUG=1 
GLIBCXXDEBUGPEDANTIC=1

在预处理器宏中。

旧版 Xcode 图片 :!较新的 Xcode:

图片

示例代码:

#include <iostream>
#include <fstream>
#include <string>

using namespace std;

int main(int argc, const char * argv[])
{
    ofstream myfile;
    myfile.open ("/Developer/afile.txt");
        if(!myfile)
        {
        std::cout << "ERROR" std::endl;
        }    
    myfile << "Writing this to a file.\n";
    myfile.close();
    return 0;
}
于 2013-03-22T17:32:26.193 回答
2

如果您不想弄乱 Xcode 中的任何内容,担心您可能会破坏其他设置,请执行以下操作:

构建并运行控制台程序或应用程序后,请转到通常位于项目布局左侧的文件列表,找到“项目”目录,右键单击或选项单击并选择“在 Finder 中显示” . 这是 Xcode 每次为特定项目运行它时转储构建的地方。每个工作区都有自己的构建文件夹。你应该在那里找到你选择或创建的文件,如果你想在那里添加你自己的文件,只需拖动它,然后你可以从你的控制台或应用程序中调用它: myfile.open("file.txt");

或者只是更改项目的工作目录并使用可能比 /Developer/Gibberish/Build/Debug/whatever 更易于访问的文件夹。

这使得将您的代码移植到 Win32 或其他系统变得容易,至少对我来说是这样。

于 2013-10-07T22:16:08.740 回答
0

http://kentarotanaka.com/how-to-read-input-file-for-c-in-xcode/

将文本文件移动到工作区的项目目录将有所帮助,如上述链接中所述。

于 2020-07-28T07:47:57.330 回答