【问题标题】:File saving location for Mac applicationsMac 应用程序的文件保存位置
【发布时间】:2011-07-11 22:23:01
【问题描述】:

我正在将我的 iOS 项目移植到 Mac

我保存了几个文件,在 iOS 上,我将它保存在 Documents/ 下的 .app 中,但是,MAC OSX 没有创建文件

/Users/SMTH/Desktop/Development/SIO2 2/SIO2_SDK/tutorials/MyMacApp/macos/build/Debug/00_template.app/Contents/MacOS/../Documents/menustate.sav

使用

std::ofstream file;
file.open(fpath.c_str(), std::ios::out | std::ios::binary);

我是在做某事。错误的。或者我不能像 iOS 应用一样在 Mac OSX 应用中保存(然后在 MAC 上保存在哪里?)

编辑:我还尝试了其他位置,例如 file.open("~/Documents/menustate.sav", std::ios::out | std::ios::binary); 但仍然没有创建文件

唯一可保存的路径是“./”->“./menustate.sav”,它将它保存到 somepath/00_template.app/Contents/Resources' 但为什么可以它保存到资源,而不是其他地方?

谢谢

【问题讨论】:

    标签: c++ ios macos std


    【解决方案1】:

    基本上你不应该因为在 OSX 应用程序可以由多个用户使用,因此应用程序通常存储为只能由安装程序而不是普通用户写入。

    open 调用是我假设调用 unix open 函数 - 如果是这样,请查看 file.open 的返回值,看看它是否为 -1。如果是这样,那么查看全局变量 errno 以了解它失败的原因。一个体面的 C++ 类会将其包装起来,以在 open 引发的异常中为您提供错误。

    对于 MacOSX,请查看 Apple 在 where to put application files 上的文档。

    【讨论】:

    • 我刚刚注意到,我根本无法保存...我正在使用 std -> std::ofstream 文件保存; file.open("~/Documents/menustate.sav", std::ios::out | std::ios::binary); ERROR_IF_ARG(!file.is_open(), "couldnt open file for save at '%s'", fpath.c_str(), return);
    • ofstream::open 的返回类型为 void,因此您无法检查 UNIX open 返回值。您需要依赖流对象的错误状态,这与平台无关。
    • std::ofstream 无法理解~
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-10-10
    • 1970-01-01
    • 1970-01-01
    • 2013-06-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多