FireFox运行时如何访问FireFox 3书签?

时间:2009-03-09 20:39:21

标签: c# .net sqlite firefox

Firefox 3现在将书签存储在名为profiles.sqlite的Sqlite文件中。

此文件在Firefox 3运行时被锁定。

我知道有备份文件,但它们已经过时(仅在FF退出时写入)。

我不希望用户必须安装插件。

有没有办法在FF 3运行时抓取书签?

我正在使用C#3.5 for Windows进行开发。

2 个答案:

答案 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);