【问题标题】:Simple C++ write-to-file not working within Mac OS X App - why? (and why me?)简单的 C++ 写入文件在 Mac OS X 应用程序中不起作用 - 为什么? (为什么是我?)
【发布时间】:2011-05-10 23:44:06
【问题描述】:

代码很简单:

#include <iostream>
#include <fstream>
#include <string>

int main(int argc, char* argv[] )
{
    std::ofstream theStream;
    theStream.open("trash.txt");
    theStream << "some words" << std::endl;
    theStream.close();
}

如果我从命令行运行它,那么我会在同一目录中获得预期的文件。如果将可执行文件的内容打包到 MacOS .app 中,则不会在任何地方写入文件。 (或者也许它只是被立即删除了?)

这是我用来将可执行文件放入 .app 的简单脚本。也许这就是我要出错的地方。

#!/bin/bash

appName=MyApp
if [ $1 ] 
then 
    appName=$1
else 
    echo "usage: convertToApp executableFile"
    exit
fi

if [ -e "$appName" ] 
then
    mkdir $appName.app
    mkdir $appName.app/Contents
    mkdir $appName.app/Contents/MacOS
    mkdir $appName.app/Contents/Resources
    cp $appName $appName.app/Contents/MacOS/$appName
    echo -n 'APPL????' > $appName.app/Contents/PkgInfo
else
    echo "specified file does not exist"
fi

知道为什么我看不到我想看的文件吗?

【问题讨论】:

  • 您希望文件出现在哪里?你为什么希望它出现在那里?
  • 当应用程序作为应用程序而不是作为文件运行时,您需要考虑应用程序的当前工作目录是什么。

标签: c++ macos fileoutputstream


【解决方案1】:

尝试使用完整路径或更改当前工作目录,而不是“trash.txt”。

【讨论】:

  • 要么是这个,要么是权限问题。我没有看到任何错误检查。检查:cplusplus.com/reference/iostream/ios/fail
  • @Aaron:他使用的是相对路径,所以这很可能是为什么在命令行写入成功但在执行 .app 时失败的原因——应用程序通常没有自己的写入权限捆绑包,但命令行通常会将您放在您的主文件夹中的某个位置,您可以在其中进行写访问。 (好吧,无论如何,这是我的解释。)
猜你喜欢
  • 1970-01-01
  • 2012-02-19
  • 1970-01-01
  • 2011-06-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-16
  • 1970-01-01
相关资源
最近更新 更多