Я использую 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
Можете ли вы дать мне идею?
Кстати, в моем приложении Adobe Air:
var file:File = File.applicationDirectory.resolvePath(path);
trace(file.exists); // returns true
Таким образом, Adobe Air имеет доступ к локальной файловой системе.
Оказывается, что код низкого уровня c не сможет увидеть РЕАЛЬНЫЙ локальная файловая система. Нам нужно использовать виртуальную файловую систему Adobe.
CModule.vfs.addDirectory("/MyPath/");
CModule.vfs.addFile("/MyPath/MyFile.txt", data);
После того, как мы настроили вышеупомянутую VFS, наша функция чтения файла C сможет увидеть файл /MyPath/MyFile.txt
,
Других решений пока нет …