Открытие файла в Mac OS X - PullRequest
       20

Открытие файла в Mac OS X

1 голос
/ 11 апреля 2010

Я пытаюсь открыть текстовый файл с C ++ в Mac OS X, но всегда получаю ошибку шины.

Мне все равно, куда поместить файл. Мне просто нужно это прочитать. Я неправильно пишу адрес? или эта ошибка шины имеет другую причину?

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

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

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

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

Ответы [ 2 ]

3 голосов
/ 11 апреля 2010

С небольшим уточнением я вижу проблему в вашем коде 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 для этого, так что сделайте свое исследование. Есть также более надежные способы разделения поведения для различных платформ, вы можете посмотреть на это или открыть другой вопрос по этому поводу. Я просто хотел выразить свою идею иметь функцию, которая будет возвращать вам соответствующий путь к рабочему столу независимо от того, на какой платформе вы компилируете свой код.

0 голосов
/ 11 июня 2014

Этот код правильный! Обратите внимание на каталог, в котором находится исполняемый файл. Конечно, каталог выполнения не совпадает с ожидаемым (я полагаю, каталог файлов .c, верно?).

Я полагаю, вы запускаете приложение из IDE. Это комм в Xcode, он монтирует exec`s в другом месте, отличном от того, где находятся файлы проекта, и это такое местоположение, которое учитывается при запуске программы, независимо от того, выполняете ли вы ее из IDE или нет!

Просто переместите файл, который вы хотите прочитать, в папку приложения, и он будет работать правильно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...