在Windows Corona Simulator中处理数据库文件:数据库磁盘映像格式错误

时间:2013-01-04 19:00:55

标签: sqlite corona

在我的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

有人知道这个问题的解决方案吗?

2 个答案:

答案 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

干杯!