我有一个使用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();
但无济于事。
使用这些特殊字符连接到文件的正确方法是什么?谢谢。