1

私のコロナSDKアプリでは、sqliteデータベースファイルを別の場所にコピーしてから開いています。Mac OS のコロナ シミュレーターと Android ビルドで正常に動作します。しかし、Windows 8 のコロナ シミュレーターでは機能しません。最初のデータベース操作の後に表示されるエラー メッセージは、「データベース ディスク イメージの形式が正しくありません」です。

コロナ サイト http://developer.coronalabs.com/forum/2011/07/09/sqlite-db-being-corrupted-windowsで問題の説明を見つけました

この問題の解決策を知っている人はいますか?

4

2 に答える 2

0

私はこれが古いことを知っていますが、リンク上のコードの実際の問題 (ブライアン バートン博士によって既に言及されている以外に) が null でない場合に、最初に開いたファイルを閉じていないことです。したがって、代わりに:

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 に答える