我正在使用ActionScript库项目在Mobile和Desktop 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中复制到应用程序存储目录中的正确方法吗?以这种方式共享图书馆项目的资源/资产是否可能?
如有任何建议,我们将不胜感激。
在对在AS3中使用[Embed]
标记进行了更多研究后,我现在发现这是我应该用来使文件可用于消费项目的东西(我以前只将其用于图像,没有考虑将其用于其他文件类型)。
[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();
嘿,很快,数据库就可以使用了。