XCode 7 - fstream在iPhone模拟器中不起作用

时间:2016-03-04 04:03:26

标签: iphone xcode ipad ifstream ofstream

以下显示的功能在Xcode中运行良好,只要我在OSX应用程序中使用它们...... 现在我写了一个iOS应用程序,我想在.txt文件中保存一些数据并再次读取它们,但它不起作用......既没有写入文件,也没有读取... 我已经在网上寻找解决方案,但我只找到解决方案,只要它在OSX应用程序中不起作用(错误的目录等等),但这不是我的情况,那里我已经让它工作了......

当我在iOS模拟器中使用它以及如何让它在那里运行时有什么区别?

//下面的代码现在是更正后的版本(在发布之前没有“这个缺失”部分。

void SaveData(std::string FileName)
{
    //!!this was missing
        char *H = getenv("HOME");
        std::string Home(H);
        std::string FileName = Home + "/Documents/" + FileName;

    std::ofstream FileOut (FileName);

    if (FileOut.is_open())
    {
        //!!write data to file
        FileOut.close();
    }
}


void LoadData(std::string FileName)
{
    //!!this was missing
        char *H = getenv("HOME");
        std::string Home(H);
        std::string FileName = Home + "/Documents/" + FileName;

    std::ifstream FileIn;
    FileIn.open(FileName.c_str(), std::ios::in);

    if(not FileIn.good())
    {
        //!!error message
        return;
    }

    //!!read data from file
    FileIn.close();
}

2 个答案:

答案 0 :(得分:1)

iOS是Sandboxed并限制了可以读取和写入的区域,并且users/me/documents/xcodeprojects不正确。

有关详细信息,请参阅About the iOS File System

您可以编写多个目录,而Documents目录可能就是您想要的。你必须调用以获取路径,这里是C ++,Objective-C和Swift中的示例调用:

C ++(Thx:Moritz Buchty):

char *H = getenv("HOME");
std::string Home(H);
std::string FileName = Home + "/Documents/" + FileName;

ObjC:

NSArray *documentDirectoryPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) firstObject];

夫特:

let documentDirectoryPath = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true).first as! String

答案 1 :(得分:0)

您需要将文件保存到应用程序的Documents文件夹中。有关它的更多信息,请阅读this answer.