【问题标题】:Differences between running OSX App from Finder versus Xcode?从 Finder 和 Xcode 运行 OSX App 的区别?
【发布时间】:2014-11-27 11:04:02
【问题描述】:

从 Finder 和 Xcode 运行 OSX App 的区别???

系统是运行 Mavericks OSX 10.9.5 和最新 Xcode 6.0.1 的 iMac 27 英寸一体机

App读取一个二进制文件并写入两个文本文件,可能会重写二进制文件,并绘制一个 窗口客户区。

App 完全在 Xcode 中运行。应用程序、二进制文件和两个文本文件位于 ~/Debug 或 ~/Release 目录中。 写入文件没有问题。文件 i/o 代码就是这样做的……

std::fstream out(  binary_file, std::ios::in|std::ios::binary);
if ( out )
out.read(buffer, MaxBuffer);
out.close();

ofstream info(“info_file.txt”);
if ( info.is_open() )
info << text;
info.close();
system("chmod 777 info_file.txt"); //tried this, doesn’t help

ofstream clout(“clout_file.txt”);
if ( clout.is_open() )
clout << text;
clout.close();
system("chmod 777 clout_file.txt"); //tried this, doesn’t help

从 Finder 运行(双击)时,应用程序无法写入文件。无论应用程序和文件位于何处……

/Users/myname/Applications/Appname

/Users/myname/Library/Application Support/Appname

其他

我应该说该应用是在 Xcode 中构建的存档/发布并放置在目标目录中 查找器情况。这是正确的方法吗?这是我的第一个 OSX 应用程序,但我一直在为 几十年。

Finder 情况的权限是

App: myname Read & Write, staff Read only, everyone 只读 二进制文件:myname Read & Write、staff Read & Write、Everyone Read & Write 文本文件:myname Read & Write、staff Read & Write、Everyone Read & Write

我还检查了 Unix 终端目录树中的所有权限。 /用户/我的名字/…

Xcode 与 Finder,有什么区别?关于……

用户名(别名)

组名(员工、根、管理员)

启动时的工作目录

应用程序和文件的权限(读取、写入、执行)

应用和文件的位置

文件写入的 /tmp 位置会起作用吗?

哪里是放置应用程序和文件的最佳位置?

App 工作目录由 App 更改为 App 和文件所在的位置。 Xcode -> 产品 -> 方案 -> 编辑方案 -> 选项 -> 工作目录设置为相同位置。 这无助于 Finder 运行情况。

此应用程序的 MS Windows 版本运行良好。 我已经为 iMac OSX 环境移植、重写了它,它在 Xcode 中运行良好。 Finder案例有什么问题?为什么输出模式打不开文件?

我正在考虑用 Objective-C 风格重写文件 i/o,但这会很痛苦,不应该 必要的。 CString 与 NSString 对我来说是一个很大的痛苦。我不得不使用 .mm 和 Objective- c++ 源代码类型可以做到这一点。

欢迎提出想法并表示感谢。

【问题讨论】:

  • 您应该在启动时将工作目录设置为合理的位置,而不是依赖于工作目录在启动时发生的任何内容(通常从 Finder 启动时为/)。要么使用完整路径,要么使用文件的完整路径。
  • 应用工作目录被应用更改为应用和文件所在的位置。
  • 您的意思是您在启动时致电chdir 或类似名称?哦不 - 我看到你在谈论 Xcode 中的方案 - 这仅适用于从 Xcode 运行时 - 它不会影响从命令行或 Finder 运行时发生的情况。
  • 完整路径名解决所有问题。尝试了多个目录。好的。太棒了。

标签: xcode macos finder


【解决方案1】:

完整路径名解决了从 Finder 运行的所有问题。已成功尝试多个目录位置。非常感谢 Paul R。

【讨论】:

  • 你的意思是例如ofstream clout(“~/out/clout_file.txt”);?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-04-19
  • 1970-01-01
  • 2018-11-02
  • 1970-01-01
  • 1970-01-01
  • 2021-12-03
  • 1970-01-01
相关资源
最近更新 更多