SQLITE_EXTERN char *sqlite3_temp_directory;
如果將此全域變數指向一個字串,該字串是資料夾(也就是目錄)的名稱,則在使用內建 虛擬檔案系統 (VFS) 時,SQLite 建立的所有暫存檔案都會放在該目錄中。如果此變數是 NULL 指標,則 SQLite 會搜尋合適的暫存檔案目錄。
強烈建議應用程式不要使用此全域變數。在 Windows Runtime (WinRT) 上,需要設定暫存資料夾。但對於所有其他平台,強烈建議應用程式不要讀取或寫入此變數。此全域變數是為了舊版應用程式的回溯相容性而存在的遺跡,在新專案中應避免使用。
在多個執行緒中同時讀取或修改此變數是不安全的。如果在另一個執行緒中同時使用資料庫連線,則讀取或修改此變數也是不安全的。此變數的設計目的是在程序初始化過程中,且在呼叫任何 SQLite 介面常式之前設定一次,之後保持不變。
temp_store_directory 指令可能會修改此變數,並使其指向從 sqlite3_malloc 獲得的記憶體。此外,temp_store_directory 指令 一直假設此變數指向的任何字串都保存在從 sqlite3_malloc 獲得的記憶體中,並且該指令可能會嘗試使用 sqlite3_free 釋放該記憶體。因此,如果直接修改此變數,則應將其設為 NULL 或使其指向從 sqlite3_malloc 獲得的記憶體,否則應避免使用 temp_store_directory 指令。除了 temp_store_directory 指令 要求的情況外,SQLite 不會釋放 sqlite3_temp_directory 指向的記憶體。如果應用程式想要釋放該記憶體,則必須自行執行,並注意僅在所有 資料庫連線 物件都已銷毀後才能執行此操作。
Windows Runtime 使用者注意事項: 必須在呼叫 sqlite3_open 或 sqlite3_open_v2 之前設定暫存目錄。否則,需要使用暫存檔案的各種功能可能會失敗。以下是如何使用 C++ 和 Windows Runtime 執行此操作的範例
LPCWSTR zPath = Windows::Storage::ApplicationData::Current-> TemporaryFolder->Path->Data(); char zPathBuf[MAX_PATH + 1]; memset(zPathBuf, 0, sizeof(zPathBuf)); WideCharToMultiByte(CP_UTF8, 0, zPath, -1, zPathBuf, sizeof(zPathBuf), NULL, NULL); sqlite3_temp_directory = sqlite3_mprintf("%s", zPathBuf);