SQLITE_EXTERN char * sqlite3_temp_directory;
如果使此全局变量指向一个字符串,该字符串是文件夹(也称为目录)的名称,则SQLite在使用内置VFS时创建的所有临时文件 都将放置在该目录中。如果此变量是NULL指针,则SQLite将搜索适当的临时文件目录。
强烈建议应用程序不要使用此全局变量。需要在Windows运行时(WinRT)上设置一个临时文件夹。但是对于所有其他平台,强烈建议应用程序不要读写此变量。此全局变量是一个遗留物,用于与旧应用程序向后兼容,因此在新项目中应避免使用。
一次在多个线程中读取或修改此变量是不安全的。如果在单独的线程中同时使用数据库连接,则不安全地读取或修改此变量。打算在进程初始化期间以及在调用任何SQLite接口例程之前,一次设置此变量,此后此变量保持不变。
所述temp_store_directory编译指示可以修改此变量并且导致其指向从获得存储器sqlite3_malloc。此外,temp_store_directory pragma始终假定此变量指向的任何字符串都保存在从sqlite3_malloc获得的内存中, 并且pragma可以尝试使用sqlite3_free释放该内存。因此,如果直接修改此变量,则应将其设为NULL或指向从sqlite3_malloc获得的内存, 否则应避免使用temp_store_directory杂注。除非temp_store_directory编译指示有要求,SQLite不会释放sqlite3_temp_directory指向的内存。如果应用程序希望释放该内存,则它必须自己释放内存,只有 在销毁所有数据库连接对象之后才注意这样做。
Windows运行时用户注意: 必须在调用sqlite3_open或sqlite3_open_v2之前设置临时目录。否则,要求使用临时文件的各种功能可能会失败。这是如何在Windows运行时中使用C ++来执行此操作的示例:
LPCWSTR zPath = Windows :: Storage :: ApplicationData :: Current-> TemporaryFolder->路径-> 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);