RussianLDP Рейтинг@Mail.ru
WebMoney: 
WMZ Z294115950220 
WMR R409981405661 
WME E134003968233 
Visa 
4274 3200 2453 6495 

Small. Fast. Reliable.
Choose any three.

SQLite C Interface

Название каталога, хранящего временные файлы

SQLITE_EXTERN char *sqlite3_temp_directory;

Если эта глобальная переменная будет указывать на последовательность, которая является названием каталога, то все временные файлы, созданные SQLite, используя встроенный VFS, будут помещены в тот каталог. Если эта переменная NULL, SQLite выполняет поиск соответствующего временного каталога.

Не рекомендуется использовать эту глобальную переменную. Это требуется, чтобы устанавливать временную папку на Windows Runtime (WinRT). Но для всех других платформ настоятельно рекомендовано ее не трогать. Эта глобальная переменная пережиток, который существует для обратной совместимости унаследованных приложений.

Небезопасно читать или менять эту переменную больше, чем в одном потоке за один раз. Небезопасно читать или менять эту переменную, если соединение с базой данных используется в то же время в отдельном потоке. Считается, что эта переменная установлена однажды как часть процесса инициализации и прежде, чем любой интерфейс SQLite вызван, и что переменная остается неизменной после этого.

Прагма temp_store_directory может изменить эту переменную и заставить ее указывать на память, полученную из sqlite3_malloc . Кроме того, temp_store_directory pragma всегда предполагает, что любая последовательность, на которую указывает эта переменная, проводится в памяти, полученной из sqlite3_malloc, а прагма может попытаться освободить ту память, используя sqlite3_free. Следовательно, если эта переменная изменяется непосредственно, это должно быть сделано NULL или указать на память, полученную из sqlite3_malloc, иначе прагмы temp_store_directory нужно избежать. Кроме тех случаев, когда вызвана прагма temp_store_directory pragma 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);