在文件路径中使用特殊字符连接到SQLite文件

时间:2018-07-16 23:29:24

标签: c# sqlite unity3d escaping uri

我有一个使用SQLite连接到某些数据库的统一应用程序。我使用了Mono.Data.Sqlite在here上的教程。 98%的时间:可行。但是,如果用户自定义其Steam游戏目录以包含特殊字符,则SQLite连接失败。

使用以下任一方法通过连接字符串进行连接都可以正常工作:

URI=file:C:/DB_TEMP/StupidName/main.db //works fine
Data Source=C:/DB_TEMP/StupidName/main.db //works fine

但是,尝试连接以下内容:

string path = "C:/DB_TEMP/-=StupidName=-/main.db";
string connectionString = "URI=file:" + path;
SqliteConnection connection = new SqliteConnection(connectionString);
connection.Open();

引发异常:

System.ArgumentException: Invalid ConnectionString format for parameter "URI"

我试图改用“数据源”,希望它不会关心特殊字符:

string path = "C:/DB_TEMP/-=StupidName=-/main.db";
string connectionString = "Data Source=" + path;
SqliteConnection connection = new SqliteConnection(connectionString);
connection.Open();

但是我遇到了同样的异常

System.ArgumentException: Invalid ConnectionString format for parameter "Data Source"

我尝试了其他各种事情,例如通过Uri类构造它:

string path = "C:/DB_TEMP/-=StupidName=-/main.db";
Uri uri = new System.Uri(path);
string connectionString = "URI=" + uri.AbsoluteUri;
SqliteConnection connection = new SqliteConnection(connectionString);
connection.Open();

..以及尝试使用Uri.EscapeUriString(path)对该字符串进行编码,并直接尝试转义可能令人反感的字符:

string hyphen = Uri.EscapeDataString("-");
string equals = Uri.EscapeDataString("=");

string path = "C:/DB_TEMP/" + hyphen + equals + "StupidName" + equals + hyphen + "/main.db";
string connectionString = "Data Source=" + path;
SqliteConnection connection = new SqliteConnection(connectionString);
connection.Open();

但无济于事。

使用这些特殊字符连接到文件的正确方法是什么?谢谢。

0 个答案:

没有答案