Xcode 找不到存在的文件(使用 c++ fopen)

Xcode can't find files that exist (using c++ fopen)

我最近 运行 遇到了这个奇怪的问题,在我 Xcode 的 Cocoa 应用程序项目中,使用“fopen”时出现找不到文件的错误(errno 2),从 C++ 文件中调用。我确保将这些文件复制到项目目录中,然后将它们从 Finder 目录拖到 Xcode 项目树中。最后,在方案的选项中,我选中了“使用自定义目录”并输入了我拥有项目和所有文件的目录。该程序构建良好,但在运行时出现 BAD ACCESS 错误,我可以看到我的 FILE* 变量仍然为 NULL。抛出异常的命令实际上是在两行之后的“fread”,但这只是因为“fopen”没有完成它的工作。

这整个设置以前在纯 C++ 项目中运行良好。但这是不同的,因为它在 Objective-C 中作为 Cocoa 应用程序开始(因为我打算使用 C++ 来实现程序的主要逻辑)。在某些时候,我还必须将所有“.m”文件的扩展名更改为“.mm”,否则编译器甚至找不到 C++ 标准库! (但这可能不是重点)

所以问题是..为了让程序找到我要打开的文件,我还需要检查什么?

注意:项目的 backbone 是用 C++ 编写的,我使用 Cocoa 只是为了能够在屏幕上显示图像,所以如果有人有更好的在 C++ 项目中包含图形的方法我洗耳恭听。

感谢阅读

编辑:我正在使用 Xcode 12.4 和 Catalina 10.15.7

Cocoa 应用程序处理文件的方式与命令行 C++ 应用程序不同。 Cocoa 应用程序创建一个应用程序包,这是您要阅读的文件应该所在的位置。如果您有要在 Cocoa 应用程序中读取的文件,请将它们添加到项目中。当您将文件添加到项目时,它们将被复制到应用程序包中。确保它们处于应用程序目标的 Copy Bundle Resources 构建阶段。

使用 Bundle class 中的方法而不是 fopen 中的方法来定位文件。以下 Swift 代码在主应用程序包中找到名为“MyFile.txt”的文件:

let mainBundle = Bundle.main
let fileURL = mainBundle.url(forResource: "MyFile", withExtension: "txt")