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

XCode 7 - fstream does not work in iPhone simulator

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

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

//下面的代码现在是更正后的版本(在发布之前没有 "this was missing" 部分。

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();
}

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

iOS 被沙盒化并限制了可以读写的区域,users/me/documents/xcodeprojects 是不正确的。

详情见About the iOS File System

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

C++(致谢:Moritz Buchty):

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

对象:

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

Swift:

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