前段時間作了個軟件,用.net作的,用戶和軟件的一些配置內容用sqlite3來存儲.sql
因而把sqlite3編譯成dll並在C#/CLR裏調用.數據庫
測試了下,發現sqlite3不支持中文路徑,有些帶空格的路徑(Program Files,Document and settings等),打開數據庫會出錯.測試
查了下文檔,好像編碼的問題(UTF-8,UTF-16等),由於這方面內容比較多,沒有細看,因此想了一些很是規的解決方法編碼
先看常見的打開數據庫.net
/*相對路徑方法:打開當前目錄下的test.sb,若是不存在這個db則建立*/ sqlite3* db; int rc = sqlite3_open("test.db",&db);
/*絕對路徑方法:好比打開C盤下的test.sb,若是不存在這個db則建立*/ sqlite3* db; int rc = sqlite3_open("C:\\test.db",&db);
/*會出現問題的方式:好比打開C:\Program Files目錄下的test.sb,若是不存在這個db則建立*/ sqlite3* db; int rc = sqlite3_open("C:\\Program Files\\test.db",&db); /*會出現問題的方式1:好比打開C:\實驗文件夾\目錄下的test.sb,若是不存在這個db則建立*/ sqlite3* db; int rc = sqlite3_open("C:\\實驗文件夾\\test.db",&db);
爲了打開上面2個目錄下的test.dbcode
能夠把系統的當前路徑設置爲"C:\\Program Files\\"或"C:\\實驗文件夾\\",而後再用相對路徑方式打開:sqlite
int rc = sqlite3_open("test.db",&db)進程
便可,VC++.net代碼:文檔
/*修改當前路徑*/ System::Environment::CurrentDirectory = "C:\\實驗文件夾" ; /*打開數據庫*/ int rc = sqlite3_open("test.db",&db);
要說的是,設置好當前路徑並打開完後,最好把當前路徑改回成經常使用的路徑:好比桌面,個人文檔等.it
由於"C:\\實驗文件夾"被設置成當前路徑後在程序中就不能刪除,刪除會提示文件夾正在被另外一個進程使用.