c++ - 无法访问嵌入到 Objective-C 项目中的 C++ 代码中的文件

标签 c++ objective-c macos file

我在 Xcode 中制作一个项目,我试图混合用 C++ 编写的逻辑和在 Objective-C 中处理 GUI 组件。我遇到了以下问题:

每当我用 C++ 代码打开文件流时(就像我通常在完全用 C++ 编写的项目中所做的那样,它确实有效),文件无法打开,我没有收到任何错误消息,也不知道如何处理这种情况.以下代码位于我的 C++ 类的一个方法中,它没有任何问题:

std::fstream file;

file.open("file");
if (file) {
    file << "The string that is not printed to a file";
}

file.close();

如何修复文件流并使它们在混合代码项目中工作?

注意:问题不在于在单个项目中同时处理 C++ 和 Objective-C,因为我可以使用包装器对象成功调用 C++ 方法。

最佳答案

事实上,问题在于 Cocoa 应用程序在它们自己的沙箱内工作,默认情况下无法写入或读取沙箱外的任何文件。

我通过初步创建一个文件并指定它的绝对路径来解决这个问题。我在 getcwd() C 标准库函数的帮助下找到了沙箱的路径:

char cwd[100];
std::string sandbox_path = getcwd(cwd, sizeof(cwd));

std::string full_path = sandbox_path + "/" + FILE_NAME;

std::fstream source_file;
source_file.open(full_path, std::ios::in | std::ios::out | std::ios::binary );

谢谢回复的人!

关于c++ - 无法访问嵌入到 Objective-C 项目中的 C++ 代码中的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56239574/

相关文章:

c++ - 通过引用传递的 C 字符串的输入验证

objective-c - @interface 或@implementation 中的私有(private)ivar

iphone - 如何在不更改 iPhone 应用程序中的设备方向的情况下更改应用程序的方向

objective-c - 从另一个类调用函数

c++ - MISRA C++(规则 18-4-1)和动态内存分配 - 是否允许 std::string?

c++ - 调用解构后动态分配的内存中存储的值会发生什么变化?

macos - emacs:如何设置用户当前文件夹?

macos - 从 https 站点获取证书

ruby - 为什么我在 Mountain Lion 上更新 Rubygems 时得到 "conflicting chdir during another chdir block"?

c++ - 多线程全局对象访问