2012-09-05 72 views
1

我在臨時文件夾中創建一個sqlite數據庫。現在我想將該文件複製到另一個文件夾。有沒有任何sqlite命令來重命名sqlite數據庫文件?將SQLite數據庫複製到另一個路徑

我試過在C++中使用重命名函數,但它返回錯誤18.錯誤否18表示:「包含名稱newname的目錄必須與文件在同一文件系統上(如名稱oldname所示)」。

有人可以建議一個更好的方式來做到這一點。

+0

嗯...... SQLite數據庫是一個文件。如果你想移動文件,只需移動文件。沒有必要從所述數據庫中移動SQLite數據庫。 – 2012-09-05 06:48:03

+0

我正在將sqlite數據庫文件移動到另一個文件夾。 – Sandy

+0

然後移動它。就這麼簡單。爲什麼你想要一個SQLite命令來執行文件系統功能? – 2012-09-05 06:52:39

回答

2

在正確的文件系統上使用臨時目錄!

首先,sqlite數據庫只是一個文件。它可以移動或圍繞任何你想複製,前提是:

  • 它是正確關閉最後一次,所以就沒有東西回滾在雜誌
  • 如果使用提前寫入日誌日誌類型,它是完全檢查點。

因此,將它作爲文件移動是正確的。現在有兩種方法移動文件:

  • 使用rename系統調用。
  • 通過複製文件並刪除舊文件。

前者有許多優點:它不能留下部分文件,不能留下兩個文件,它是非常快的,如果你用它來重命名舊文件,沒有時間段目標名稱不存在(最後是POSIX語義,Windows可以在NTFS上執行,而不是FAT文件系統)。它也有一個重要的缺點:它只能在文件系統中工作。所以,你必須:

  • 如果您將其重命名,以確保萬一過程失敗一個部分寫入文件沒有留下,你需要使用重命名,因此必須在同一個文件系統使用一個臨時位置。通常這是通過在同一個目錄中使用不同的名稱來完成的,而不是使用臨時目錄。
  • 如果您正在重命名它,因爲目標可能很慢,例如因爲你想把它放在網絡共享上,你顯然希望在不同的文件系統上使用臨時目錄。這意味着您必須閱讀該文件並使用新名稱進行編寫。在標準的C或C++庫中沒有這個功能,但是很多庫都會有一個(像python這樣的高級語言會有一個,你總是可以執行/bin/mv來爲你做)。
+0

我只在臨時目錄中創建sqlite數據庫文件。我想將該sqlite文件移動到另一個文件夾。我不能使用使用rename()函數,它會返回錯誤。 – Sandy

+0

@Sandy - 然後**使用文件系統移動文件**。不要害怕殼。 – 2012-09-05 06:55:07

+0

我會用不同的名稱在同一目錄下創建sqlite文件,然後使用rename()。這將解決我的問題。感謝您的回覆。 – Sandy

相關問題