2013-01-04 71 views
1

在我科羅娜SDK的應用程序,我的應對SQLite數據庫文件複製到另一個位置,然後打開它。 它在Mac OS以及Android版本的Corona模擬器中工作正常。但它在Windows 8上的Corona Simulator中無法正常工作。第一個數據庫操作後出現的錯誤消息是「數據庫磁盤映像格式錯誤」。應對數據庫文件:數據庫磁盤映像格式不正確

我發現電暈現場問題描述 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的電暈模擬器罰款不指定二進制讀/寫,則需要爲Windows開發。

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 

乾杯!

相關問題