1

在我的 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上找到了问题描述

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

4

2 回答 2

2

以为我会发布答案,尽管这是为未来的搜索者发布的:

Windows 在为模拟器复制文件时很挑剔。它要求您指定数据库将作为二进制文件进行读取和写入:

local fileSource = io.open( pathSource, "rb" ) 
local fileDest = io.open( pathDest, "wb" ) 

虽然它在 Mac Corona Simulator 中工作正常而无需指定二进制读/写,但它是 Windows 开发所必需的。

于 2013-06-12T02:26:43.780 回答
0

我知道这是旧的,但链接上的代码的实际问题(除了布赖恩伯顿博士已经提到的)是他们没有关闭初始打开的文件以防万一。所以而不是:

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

干杯!

于 2014-07-16T22:28:01.243 回答