Firefox 3现在将书签存储在名为profiles.sqlite的Sqlite文件中。
此文件在Firefox 3运行时被锁定。
我知道有备份文件,但它们已经过时(仅在FF退出时写入)。
我不希望用户必须安装插件。
有没有办法在FF 3运行时抓取书签?
我正在使用C#3.5 for Windows进行开发。
答案 0 :(得分:3)
SQL Lite是一个用于单用户应用程序的嵌入式数据库,不是为多用户访问而构建的。请参阅标题为“另一个RDBMS可能更好地工作的情况”的部分When To Use question list。
此外,“高并发”下的文本指出“SQLite在整个数据库文件中使用读取器/写入器锁定。”
所以,不,没有其他选择。构建一个插件。
答案 1 :(得分:2)
我也遇到了同样的问题,但在搜索了这个网站和其他人之后,为我的项目http://www.codertakeout.com提出了这个代码。
using System.Data.SQLite; // need to install sqlite .net driver
String path_to_db = @"C:\Documents and Settings\Jeff\Application Data\Mozilla\Firefox\Profiles\yhwx4xco.default\places.sqlite";
String path_to_temp = System.IO.Path.GetTempFileName();
System.IO.File.Copy(path_to_db, path_to_temp, true);
SQLiteConnection sqlite_connection = new SQLiteConnection("Data Source=" + path_to_temp + ";Version=3;Compress=True;Read Only=True;");
SQLiteCommand sqlite_command = sqlite_connection.CreateCommand();
sqlite_connection.Open();
sqlite_command.CommandText = "SELECT moz_bookmarks.title,moz_places.url FROM moz_bookmarks LEFT JOIN moz_places WHERE moz_bookmarks.fk = moz_places.id AND moz_bookmarks.title != 'null' AND moz_places.url LIKE '%http%';";
SQLiteDataReader sqlite_datareader = sqlite_command.ExecuteReader();
while (sqlite_datareader.Read())
{
System.Console.WriteLine(sqlite_datareader[1]);
}
sqlite_connection.Close();
System.IO.File.Delete(path_to_temp);