My C file_exists Функция Использование stat всегда терпит неудачу с errno = ENOENT

0

Я использую FlasCC + Swig для вызова функции C в приложении Adobe Air.

Функция C:

int file_exists(const char filename[]) {
    struct stat stbuf;
    if (stat(filename, &stbuf) == -1) {
        return (0);
    }
    return (1);
}

В моей обычной командной строке (конечно, сначала скомпилируйте main.cpp), если я поставлю "/tmp/test.txt" (файл существует), функция file_exists возвращает 1, что и ожидается.

Однако после того, как я использую FlasCC + Swig для компиляции этой функции C file_exists и создания библиотеки swc, и добавьте эту библиотеку в мое приложение Adobe Air и запустите ее, она всегда возвращает 0, что неверно.

Я проверил errno, это значение ENOENT (2):

Компонент пути не указывает существующий файл или путь - пустая строка.

http://pubs.opengroup.org/onlinepubs/7908799/xsh/stat.html

Можете ли вы дать мне какую-то идею?

BTW, в моем приложении Adobe Air:

var file:File = File.applicationDirectory.resolvePath(path);
trace(file.exists); // returns true

Таким образом, Adobe Air имеют доступ к локальной файловой системе.

  • 1
    Скорее всего, процесс находится в какой-то тюрьме и не имеет доступа к системному каталогу /tmp .
  • 0
    Я подозреваю, что Adobe Air работает в такой песочнице.
Показать ещё 2 комментария
Теги:
file
flascc

1 ответ

0
Лучший ответ

Оказывается, код с низким уровнем c не сможет увидеть локальную файловую систему REAL. Нам нужно использовать виртуальную файловую систему Adobe.

CModule.vfs.addDirectory("/MyPath/");
CModule.vfs.addFile("/MyPath/MyFile.txt", data);

После того, как мы /MyPath/MyFile.txt вышеуказанную VFS, наша функция чтения файла C сможет увидеть файл /MyPath/MyFile.txt.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню