SQLite C 接口

存放临时文件的文件夹名称

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_opensqlite3_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);

另请参阅 对象常量函数的列表。