C++ MAC OS X 无法写入 ~/库/应用程序支持/<appname>

C++ MAC OS X cannot write to ~/Library/Application Support/<appname>

本文关键字:应用程序 支持 lt gt appname OS MAC C++      更新时间:2023-10-16

如果我在.app包中保存文件,它保存OK,但苹果建议在应用程序支持中保存文件在

~/Library/Application Support/appname

~/Library/Application Support/bundleid

我两个都试过了,但总是得到一个异常。我得到一个路径到应用程序支持,这是

/Users/myname/Library/Application Support/com.company.appname/

/Users/myname/Library/Application Support/AppName/

com.company.appname在我的info.plist中被正确指定,并且AppNameproduct AppName.app,因此路径似乎是正确的。

{
    FilepathProcessor::pathForFile(fpath, "menustate", ".sav", 
                                   PATH_TO_DESTINATION_SAVE_LOAD_FOLDER);
    std::ofstream file;
    file.exceptions(std::ofstream::eofbit | std::ofstream::failbit | 
                    std::ofstream::badbit);
    INFO_ARG("prepare to save to '%s'", fpath.c_str());
    try {
        file.open(fpath.c_str(), std::ios::out | std::ios::binary | 
                  std::ios::trunc);
        ERROR_IF_ARG(!file.is_open(), "couldnt open file for saving at '%s'",
                     fpath.c_str(), return);
        //will pass this point
        //exception happens by first write
        WRITE_INT_TO_BINFILE(file, episode);
        //...
    } 
    catch (std::ofstream::failure e) {
        ERROR_IF_ARG(true, "exception %s", e.what(), return);
    }
    file.close();
}
输出:

INFO : prepare to save to '/Users/myname/Library/Application
       Support/com.comapny.appname/menustate.sav' [CALLED BY : saveToFile]
ERROR! 
    Text : exception basic_ios::clear

目录是而不是自动创建的。在保存文件之前,首先需要检查该目录是否存在,如果不存在,则需要创建该目录。