在Mac OS X中打开文件

时间:2010-04-10 23:52:38

标签: c file macos

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

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

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

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

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

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

2 个答案:

答案 0 :(得分:3)

稍微澄清一点,我看到你的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,您的研究也是如此。对于各种平台,还有更强大的分割行为方式,您可以查看或打开一个不同的问题。我只是想表达我的想法,即无论在哪个平台上编译代码,都有一个能够返回适当桌面路径的函数。

答案 1 :(得分:0)

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

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

只需将您要阅读的文件移动到应用程序的位置即可正常运行。