在Mac OS X中打开文件

我试图在Mac OS X中用C ++打开一个文本文件,但我总是遇到总线错误。

我不在乎把文件放在哪里。 我只需要阅读它。 我写的地址错了吗? 或者总线错误还有其他原因吗?

FILE *dic; dic = fopen("DICT","rb"); dic = fopen("./DICT","rb"); dic = fopen("~/DICT","rb"); dic = fopen("~//DICT","rb"); 

稍微澄清一点,我看到你的C代码(不是C ++!)中的问题是fopen()返回NULL 。 您可以通过报告详细错误来检查问题的确切原因:

 if( (dic = fopen("DICT", "rb") == NULL ) { fprintf(stderr, "%s\n", perror("ERROR:")); exit(1); } 

如果fopen()无法在用户桌面上找到该文件,并且您希望您的代码在多个平台上运行,那么您可以定义一个函数来获取用户的桌面目录以便与fopen() 。 就像是

 char* user_desktop(char* buf, size_t len) { const char* const DESKTOP_DIR = #ifdef PC "C:\\Documents and Settings\\Pooya\\Desktop\\" #elif defined(OSX) "/Users/Pooya/Desktop/" #elif defined(LINUX) "/home/users/pooya/Desktop/" // fail to compile if no OS specified ... #endif return strncpy(buf, DESKTOP_DIR, len); } 

您可能希望研究一种更健壮的方法来获取每个操作系统的桌面路径。 大多数操作系统都有此API,您的研究也是如此。 对于各种平台,还有更强大的分割行为方式,您可以查看或打开一个不同的问题。 我只想表达我的想法,即无论在哪个平台上编译代码,都有一个能够返回适当桌面路径的函数。

这段代码是对的! 注意可执行文件所在的目录。 确保执行目录与您期望的不一样(我想, .c文件的目录,对吧?)。

我相信您正在从IDE执行该应用程序。 这在Xcode中是普通的,它将exec安装在另一个位置而不是项目文件所在的位置,这个位置在执行程序时被考虑,无论你是否从IDE执行它!

只需将要读取的文件移动到应用程序的位置即可正常工作。