2013-12-09 4 views
0

Я использую проект библиотеки ActionScript для совместного использования кода и активов/ресурсов между проектами Mobile и Desktop ActionScript.Доступ к файлу ресурсов/ресурсов в проекте библиотеки ActionScript

Проект библиотеки был добавлен к двум другим проектам с помощью опции «Добавить проект» на вкладке «Путь к библиотеке» с типом связи «Объединенный в код», и все классы внутри него могут быть доступны посредством другие проекты, и работать должным образом.

Однако он содержит файл базы данных SQLite, который я хочу скопировать в File.applicationStorageDirectory в целевой системе при первой загрузке приложения, и я не уверен, как получить ссылку на файл в библиотеке проект для его копирования.

Адрес db-файла: LibraryProj - src/database/dbFile.db, и я подумал, что использовать File.applicationDirectory, а затем путь «в» swf даст мне доступ к нему, но ни один из следующих тестов не говорит о том, что файл существует.

var test:File; 

test = File.applicationDirectory.resolvePath("app:/src/database/dbFileDb.db"); 
trace("test.exists==" + test.exists); 

test = File.applicationDirectory.resolvePath("src/database/dbFileDb.db"); 
trace("test.exists==" + test.exists); 
test = File.applicationDirectory.resolvePath("database/dbFileDb.db"); 
trace("test.exists==" + test.exists); 
test = File.applicationDirectory.resolvePath("dbFileDb.db"); 
trace("test.exists==" + test.exists); 

Это правильный метод для копирования файлов ресурсов/активов из swf, содержащих объединенные библиотеки и в каталог хранения приложения? Возможно ли вообще разделить ресурсы/активы из проектов библиотеки?

Любой совет будет очень признателен.

+1

Вы встроили файл с помощью '[Embed]' тегов? –

+0

Ha! Я только что закончил переписывать код, чтобы использовать '[Embed]' 5 минут назад. Я собираюсь написать, что я должен был сделать сейчас. Спасибо за вход Джош. – Ted

ответ

1

Проведя еще несколько исследований об использовании тега [Embed] в AS3, я теперь понял, что это то, что я должен был использовать, чтобы сделать файл доступным для использования проектов (ранее я использовал его только для изображений , и не думал об этом и для других типов файлов).

[Embed('igniteDb.db', mimeType="application/octet-stream")] 
public static const myReferenceDbFile:Class; 

Чтобы скопировать файл в File.applicationStorageDirectory я использую следующий код. Он преобразует встроенный файл в массив байтов, а затем записывает его через класс FileStream в целевой файл.

//write the embedded database file data into app user files directory 
var bundleDbBytes:ByteArray; 
bundleDbBytes = new myReferenceDbFile();//gets a reference to the embedded db file 

var outputDbFile:File = File.applicationStorageDirectory.resolvePath(DB_FILE_NAME); 
var fileStream:FileStream = new FileStream(); 
fileStream.open(outputDbFile, FileMode.UPDATE); 
fileStream.writeBytes(bundleDbBytes); 
fileStream.close(); 

И hey presto, база данных готова к использованию.

Смежные вопросы