...\AppData\Local\Google\Drive\sync_config.db
Google ドライブ フォルダへのパスは、SQLITE3 データベースであるファイルにあります。私の Windows C++ プログラムは、以前はこのデータを正常に取得していましたが、最近、私の PC と私が聞いた顧客の両方で動作しなくなりました。sqlite3
コマンド ライン ユーティリティを使用してデータベースを開き、プログラムで使用しようとしている正確なクエリで正常にクエリを実行できるため、データベースは引き続き有効である必要があります。
以下に示すコードで何が起こるかというと**sqlite3_prepare_v2**
、エラー コードを返すことはありません26
。通常、このコードは、ファイルが有効なデータベースではないことを示します。では、なぜコマンド ライン ユーティリティが機能するのでしょうか。
このコードを突然壊してしまう可能性のある変更のアイデアはありますか?
extern CString GoogleDrivePath()
{
CString sPath = "";
CString sDbPath;
char acValue[1024];
DWORD lSize = sizeof(acValue);
struct _stat fstat;
sqlite3 *pDb;
sqlite3_stmt *pStmt;
int iSts;
char acSelect[] = "SELECT data_value FROM data WHERE entry_key = 'local_sync_root_path';";
const unsigned char *pPath;
DWORD lLen = GetEnvironmentVariable("LOCALAPPDATA", acValue, lSize);
if (lSize <= 0) return(sPath);
sDbPath = acValue;
sDbPath += "\\Google\\Drive\\sync_config.db";
if (_stat(sDbPath, &fstat) < 0) return(sPath);
iSts = sqlite3_open_v2(sDbPath, &pDb, SQLITE_OPEN_READONLY, NULL);
if (iSts) return(sPath);
iSts = sqlite3_prepare_v2(pDb, acSelect, -1, &pStmt, NULL);
if (!iSts) {
iSts = sqlite3_step(pStmt);
if (iSts == SQLITE_ROW) {
pPath = sqlite3_column_text(pStmt, 0);
if (pPath != NULL) {
sPath = pPath;
}
}
sqlite3_finalize(pStmt);
}
sqlite3_close(pDb);
return(sPath);
}