【问题标题】:XCode 7 - fstream does not work in iPhone simulatorXCode 7 - fstream 在 iPhone 模拟器中不起作用
【发布时间】:2016-06-17 16:47:56
【问题描述】:

下面显示的函数在 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();
}

【问题讨论】:

  • “写入文件前每一行都需要加密处理”是什么意思?数据没有“行”,它只是字节。行是一个应用程序级别的概念。
  • 文件路径是什么,将其添加到问题中。 iOS 限制了可读写的区域。
  • “加密过程”对我来说只是一个注释,我需要稍后插入数据转换功能,一旦完成初始测试。它现在无关紧要(只是一个评论),我忘记在发布之前删除它(我只将代码剥离到相关行,这样对你们来说更具可读性)。文件路径是“users/me/documents/xcodeprojects”,因此用户定义的路径是我存储我的 xcode 项目的路径......我预计这样的问题会是问题,但我在网上找不到任何应该的信息是(iOS vs OSX),如何设置(甚至在哪里设置)。

标签: iphone xcode ipad ifstream ofstream


【解决方案1】:

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];

斯威夫特:

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

【讨论】:

  • c++ 语法听起来很有希望,因为我什至不必在我的 ObjC 用户界面中的某处读取目录并将其路由,我可以直接在我的 c++ 核心程序中读取它需要它。
  • 它工作...稍作调整...常量字符“/Docs”无法附加到 char *home,中间需要一个构造函数...我插入了我上面的示例中的新代码带有“缺少”
【解决方案2】:

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

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-04
  • 2013-10-15
  • 1970-01-01
  • 2012-03-21
  • 2017-08-15
相关资源
最近更新 更多