使用C#读取Chrome浏览器的本地书签文件,当前文件在C盘下用户文件夹\AppData\Local\Google\Chrome\User Data\Default\下的Bookmarks

打开这个文件我们发现就是一个json文本文件

{
"checksum": "e723a57c9d9cbcae27ce0e1f8a5b7e71",
"roots": {
"bookmark_bar": {
"children": [ {
"date_added": "",
"id": "",
"meta_info": {
"last_visited_desktop": ""
},
"name": "微软 Bing 搜索 - 国内版",
"type": "url",
"url": "https://cn.bing.com/"
} ],
"date_added": "",
"date_modified": "",
"id": "",
"name": "书签栏",
"type": "folder"
},
"other": {
"children": [ ],
"date_added": "",
"date_modified": "",
"id": "",
"name": "其他书签",
"type": "folder"
},
"synced": {
"children": [ ],
"date_added": "",
"date_modified": "",
"id": "",
"name": "移动设备书签",
"type": "folder"
}
},
"version":
}

为了方便读取操作还是将json字符串转换为对象这里分析json结构创建对应的对象

 namespace DataOperation.Model
{
/// <summary>
/// Chorme书签保存文件结构
/// </summary>
public class ChromeBookmarks
{
public string checksum { get; set; }
public bookmark roots { get; set; }
//public string sync_transaction_version { get; set; }
public string version { get; set; }
//public string synced { get; set; }
} public class bookmark
{
public datameta bookmark_bar { get; set; }
public datameta other { get; set; }
} public class datameta
{
public List<datameta> children { get; set; }
public string date_added { get; set; }
public string date_modified { get; set; }
public string id { get; set; }
public meta_info meta_info { get; set; }
public string name { get; set; }
public string sync_transaction_version { get; set; }
public string type { get; set; }
public string url { get; set; }
} public class meta_info
{
public string last_visited_desktop { get; set; }
}
}

利用.NET提供的Newtonsoft.Json.dll来进行转换这里预先封装两个方法

         /// <summary>
/// json序列化
/// </summary>
/// <typeparam name="T">数据类型</typeparam>
/// <param name="data">数据</param>
/// <returns></returns>
public static string ListToJson<T>(T data)
{
string str = string.Empty;
try
{
if (null != data)
str = JsonConvert.SerializeObject(data);
}
catch (Exception e)
{ }
return str;
} /// <summary>
/// 反序列化
/// </summary>
/// <typeparam name="T">数据类型</typeparam>
/// <param name="jsonstr">数据</param>
/// <returns></returns>
public static Object JsonToList<T>(string jsonstr)
{
Object obj = null;
try
{
if (null != jsonstr)
obj = JsonConvert.DeserializeObject<T>(jsonstr);//反序列化
}
catch (Exception e)
{ }
return obj;
}

剩下的就是将Bookmarks文本文件读取后进行转换了

下面部分代码

         /// <summary>
/// 读取文件
/// </summary>
/// <param name="filePath"></param>
/// <returns></returns>
public static string FileRead(string filePath)
{
string rel = File.ReadAllText(filePath);
return rel;
} /// <summary>
/// 获取Chrome浏览器书签对象
/// </summary>
/// <param name="filePath"></param>
/// <returns></returns>
public ChromeBookmarks GetChromeBookmarksData(string filePath)
{
string str = FileRead(filePath);
object chromeBookmarks = JsonToList<ChromeBookmarks>(str);
if (chromeBookmarks != null)
{
return (ChromeBookmarks)chromeBookmarks;
}
return null;
}

读取Chrome书签文件的更多相关文章

  1. 手机chrome书签文件导出教程

    重大发现!!!本人亲自测试可以导出chrome书签文件登录下面的链接https://takeout.google.com/settings/takeout/custom/chrome?pli=1

  2. Chrome书签被篡改之后的恢复

    chrome书签和备份存放的路径:(XXXX为用户名)(AppData文件夹为隐藏文件夹) \Users\XXXX\AppData\Local\Google\Chrome\User Data\Defa ...

  3. JavaScript进阶(六)用JavaScript读取和保存文件

    用JavaScript读取和保存文件 因为Google还不提供同步插件数据的功能,所以导入和导出插件配置就必须和文件打交道了.而出于安全原因,只有IE才提供访问文件的API:但随着HTML 5的到来, ...

  4. .NET Core的文件系统[1]:读取并监控文件的变化

    ASP.NET Core 具有很多针对文件读取的应用.比如我们倾向于采用JSON文件来定义配置,所以应用就会涉及针对配置文件读取.如果用户发送一个针对物理文件的HTTP请求,应用会根据指定的路径读取目 ...

  5. 使用js-xlsx库,前端读取Excel报表文件

    在实际开发中,经常会遇到导入Excel文件的需求,有的产品人想法更多,想要在前端直接判断文件内容格式是否正确,必填项是否已填写 依据HTML5的FileReader,可以使用新的API打开本地文件(参 ...

  6. Java基础-输入输出-2.编写IoDemo.java的Java应用程序,程序完成的功能是:首先读取text.txt文件内容,再通过键盘输入文件的名称为iodemo.txt,把text.txt的内容存入iodemo.txt

    2.编写IoDemo.java的Java应用程序,程序完成的功能是:首先读取text.txt文件内容,再通过键盘输入文件的名称为iodemo.txt,把text.txt的内容存入iodemo.txt ...

  7. 前端读取Excel报表文件

    在实际开发中,经常会遇到导入Excel文件的需求,有的产品人想法更多,想要在前端直接判断文件内容格式是否正确,必填项是否已填写 依据HTML5的FileReader,可以使用新的API打开本地文件(参 ...

  8. matlab 连续读取多个文件

    方法1: 把文件的文件名按一定的规律命名,假如:filename1.txt,filename2.txt,...,fielname100.txt,在读取的时候则可以使用循环: for i = 1:100 ...

  9. 编写IoDemo.java的Java应用程序,程序完成的功能是:首先读取text.txt文件内容,再通过键盘输入文件的名称为iodemo.txt,把text.txt的内容存入iodemo.txt

    package zuoye; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundExcep ...

随机推荐

  1. iOS NSInteger/NSUInteger与int/unsigned int、long/unsigned long之间的区别!

    在iOS开发中经常使用NSInteger和NSUInteger,而在其他的类似于C++的语言中,我们经常使用的是int.unsigned int.我们知道iOS也可以使用g++编译器,那么它们之间是否 ...

  2. BZOJ_4383_[POI2015]Pustynia_线段树优化建图+拓扑排序

    BZOJ_4383_[POI2015]Pustynia_线段树优化建图+拓扑排序 Description 给定一个长度为n的正整数序列a,每个数都在1到10^9范围内,告诉你其中s个数,并给出m条信息 ...

  3. 【CAIOJ1177】 子串是否出现

    [题目链接] 点击打开链接 [算法] KMP [代码] #include<bits/stdc++.h> using namespace std; #define MAXA 1000010 ...

  4. NOI1995 石子合并

    传送门 这道题是经典的区间DP.因为它要求有每两个相邻的石子堆合并,所以很显然对于区间[l,r]内的情况,我们只要枚举端点k,之后把这左右两端的石子合并取最大/小即可. 之后,这题是环形怎么破?显然不 ...

  5. 1 model的创建

    extJs数据模型之Model博客分类: ExtJs   1 model的创建 //我们利用Ext.define来创建我们的模型类 //DB table person(name,age,email) ...

  6. FINDSTR 命令使用详解

    Findstr 使用正则表达式搜索文件中的文本模式. 语法 findstr [/b] [/e] [/l] [/r] [/s] [/i] [/x] [/v] [/n] [/m] [/o] [/p] [/ ...

  7. 移动端网页巧用 margin和padding 的百分比实现自适应

    一个基础却又容易混淆的css知识点 本文依赖于一个基础却又容易混淆的css知识点:当margin/padding取形式为百分比的值时,无论是left/right,还是top/bottom,都是以父元素 ...

  8. 【旧文章搬运】Idle进程相关的一些东西

    原文发表于百度空间,2009-05-13========================================================================== Idle进 ...

  9. python __builtins__ tuple类 (68)

    68.'tuple', 转换为元组类型 class tuple(object) | tuple() -> empty tuple | tuple(iterable) -> tuple in ...

  10. python __builtins__ bytearray类 (7)

    7.'bytearray', 返回一个新字节数组.这个数组里的元素是可变的,并且每个元素的值范围: 0 <= x < 256. class bytearray(object) | byte ...