![](/img/trans.png)
[英]sqlite3_open - problems checking if a file is a sqlite3 database
[英]SQLite3 open file problems
我使用GTK +和SQLite作為小型數據庫程序的前端,但是我無法讓SQLite在打開時正確檢測文件類型。 無論打開什么,它都會返回SQLITE_OK。
我嘗試了sqlite3_open
和sqlite3_open_v2
,問題仍然存在。 無論打開哪種文件類型,輸出始終是相同的:
/home/shawn/Programming/languagedb/lang.db
0 6304656
good
/home/shawn/Programming/languagedb/Makefile
0 6304656
good
這是相關的代碼:
void OpenDialog()
{
GtkWidget *WinOpen;
WinOpen = gtk_file_chooser_dialog_new("Open Database",GTK_WINDOW(WinOpen),GTK_FILE_CHOOSER_ACTION_OPEN,GTK_STOCK_CANCEL,GTK_RESPONSE_CANCEL,GTK_STOCK_OPEN,GTK_RESPONSE_ACCEPT,NULL);
if(GTK_RESPONSE_ACCEPT == gtk_dialog_run(GTK_DIALOG(WinOpen)))
{
char *filename;
filename = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(WinOpen));
printf("%s\n",filename);
db = NULL;
rc = sqlite3_open_v2(filename,&db,SQLITE_OPEN_READONLY,NULL);
printf("%i %i\n",rc,&db);
if(SQLITE_OK == rc && NULL != db)
{
printf("good\n");
}
sqlite3_close(db);
}
gtk_widget_destroy(WinOpen);
}
就像我在此答案中所說的那樣,您需要在SQLite嘗試讀取之前對打開的數據庫句柄執行非pragma
,然后驗證文件的內容。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.