在我的Corona SDK应用程序中,我正在将sqlite数据库文件复制到另一个位置然后打开它。 它适用于Mac OS上的Corona Simulator以及Android版本。但它在Windows 8上的Corona Simulator中不起作用。第一次数据库操作后出现的错误消息是“数据库磁盘映像格式错误”。
我在Corona网站上发现了一个问题描述 http://developer.coronalabs.com/forum/2011/07/09/sqlite-db-being-corrupted-windows
有人知道这个问题的解决方案吗?
答案 0 :(得分:2)
以为我会发布答案,即使这篇文章已经发布了一段时间以供未来的搜索者使用:
复制模拟器的文件时,Windows很挑剔。它要求您指定将数据库作为二进制文件进行读取和写入:
local fileSource = io.open( pathSource, "rb" )
local fileDest = io.open( pathDest, "wb" )
虽然在没有指定二进制读/写的情况下它在Mac Corona Simulator中工作正常,但它是Windows开发所必需的。
答案 1 :(得分:0)
我知道这是旧的,但链接上的代码的实际问题(除了Brian Burton博士已经提到过)是他们没有关闭初始打开的文件以防万一。所以而不是:
if( file == nil )then
-- Doesn't Already Exist, So Copy it In From Resource Directory
pathSource = system.pathForFile( dbName, system.ResourceDirectory )
fileSource = io.open( pathSource, "r" )
contentsSource = fileSource:read( "*a" )
-- Write Destination File in Documents Directory
pathDest = system.pathForFile( dbName, system.DocumentsDirectory )
fileDest = io.open( pathDest, "w" )
fileDest:write( contentsSource )
-- Done
io.close( fileSource )
io.close( fileDest )
end
你应该在最后添加和ELSE子句,如下所示:
if( file == nil )then
-- Doesn't Already Exist, So Copy it In From Resource Directory
pathSource = system.pathForFile( dbName, system.ResourceDirectory )
fileSource = io.open( pathSource, "rb" )
contentsSource = fileSource:read( "*a" )
-- Write Destination File in Documents Directory
pathDest = system.pathForFile( dbName, system.DocumentsDirectory )
fileDest = io.open( pathDest, "wb" )
fileDest:write( contentsSource )
-- Doneb
io.close( fileSource )
io.close( fileDest )
else
io.close(file)
end
干杯!