SQLITE_EXTERN char *sqlite3_temp_directory;
如果将此全局变量设置为指向一个字符串,该字符串是文件夹(也称为目录)的名称,则 SQLite 使用内置 VFS 创建的所有临时文件都将放置在该目录中。如果此变量是 NULL 指针,则 SQLite 会搜索合适的临时文件目录。
强烈建议应用程序不要使用此全局变量。在 Windows 运行时 (WinRT) 上设置临时文件夹需要用到它。但对于所有其他平台,强烈建议应用程序既不要读取也不要写入此变量。此全局变量是为向后兼容旧版应用程序而保留的遗留物,应在新的项目中避免使用。
在多个线程中同时读取或修改此变量是不安全的。如果在另一个线程中同时使用 数据库连接,则读取或修改此变量也是不安全的。此变量的用途是在进程初始化期间且在调用任何 SQLite 接口例程之前进行一次设置,并且此后保持不变。
temp_store_directory pragma 可能会修改此变量并使其指向从 sqlite3_malloc 获取的内存。此外,temp_store_directory pragma 始终假设此变量指向的任何字符串都保存在从 sqlite3_malloc 获取的内存中,并且 pragma 可能会尝试使用 sqlite3_free 释放该内存。因此,如果直接修改此变量,则应将其设置为 NULL 或使其指向从 sqlite3_malloc 获取的内存,否则应避免使用 temp_store_directory pragma。除非 temp_store_directory pragma 请求,否则 SQLite 不会释放 sqlite3_temp_directory 指向的内存。如果应用程序希望释放该内存,则必须自行释放,并注意仅在所有 数据库连接 对象都被销毁后才能释放。
Windows 运行时用户须知:必须在调用 sqlite3_open 或 sqlite3_open_v2 之前设置临时目录。否则,各种需要使用临时文件的特性可能会失败。以下是如何使用 C++ 和 Windows 运行时执行此操作的示例
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);