C# 将链表存入二进制文件及读取二进制文件得到链表示例

简介:
复制代码
// 将tasks保存到二进制文件中
public Boolean saveToFile(String file)
{
    try
    {
        if (tasks.Count==0)
        {
            // 没任务就不存
            return false;
        }


        if (File.Exists(file))
        {
            // 原有文件删掉
            File.Delete(file);
        }

        // 写文件
        FileStream writeStream = new FileStream(file, FileMode.Create);
        BinaryWriter bw = new BinaryWriter(writeStream);

        foreach (Dld tt in tasks)
        {
            bw.Write((String)tt.getID());// 以下强制类型转换并非必要,而是为了阅读时辨别类型
            bw.Write((String)tt.getFilename());
            bw.Write((String)tt.getUrl());
            bw.Write((long)tt.getRemoteFileSize());
            bw.Write((String)tt.getPercent());
            bw.Write((String)tt.getStatus());
            bw.Write((String)tt.getType());
            bw.Flush();
        }

        bw.Close();
        writeStream.Close();

        return true;
    }catch(Exception e){
        throw e;
    }
}

// 从二进制文件中提取tasks
public Boolean loadFromFile(String file)
{
    try
    {
        if (File.Exists(file)==false)
        {
            // 文件不存在直接返回
            return false;
        }

        // 读文件
        FileStream readStream = new FileStream(file, FileMode.Open);
        BinaryReader br = new BinaryReader(readStream);

        try
        {
            while(true)
            {
// 读取过程正好是写入过程的逆序 String id
= br.ReadString(); String filename = br.ReadString(); String url = br.ReadString(); long remoteFileSize = br.ReadInt64(); String percent = br.ReadString(); String status = br.ReadString(); String type = br.ReadString(); // 这个地方要根据类型判断 Dld tnew = null; if (type.Equals("http")) { tnew = new HttpDld(mainGui, id, filename, url, remoteFileSize, type); } else if (type.Equals("ftp")) { tnew = new FtpDld(mainGui, id, filename, url, remoteFileSize, type); } tnew.setStatus(status); tnew.setPercent(percent); tasks.Add(tnew); }; } catch(EndOfStreamException ex){// 读完会抛出这个异常,正常过程 System.Console.WriteLine("文件" + file + "读取完毕,读取任务" + tasks.Count+"条."); } br.Close(); readStream.Close(); return true; } catch (Exception e) { throw e; } }
复制代码

 














本文转自张昺华-sky博客园博客,原文链接:http://www.cnblogs.com/xiandedanteng/p/7111608.html,如需转载请自行联系原作者

相关文章
|
18天前
|
C语言
对链表使用插入排序的C语言实现示例
对链表使用插入排序的C语言实现示例
|
3月前
|
定位技术 C# 图形学
Unity和C#游戏编程入门:创建迷宫小球游戏示例
Unity和C#游戏编程入门:创建迷宫小球游戏示例
72 2
|
3月前
|
C#
C# 布尔值和条件语句:入门指南和实用示例
在编程中,通常需要一个只能有两个值之一的数据类型,比如: 是 / 否 开 / 关 真 / 假 为此,C# 有一个 bool 数据类型,可以取 true 或 false 的值。
70 3
|
3月前
|
存储 C#
C# 数据类型与类型转换:包含教程与示例
使用正确的数据类型对应于相应的变量是重要的;这样可以避免错误、节省时间和内存,还会使您的代码更易于维护和阅读。最常见的数据类型有:
30 0
|
6月前
|
数据采集 数据可视化 数据挖掘
C#和HttpClient结合示例:微博热点数据分析
微博是中国最大的社交媒体平台之一,它每天都会发布各种各样的热点话题,反映了网民的关注点和舆论趋势。本文将介绍如何使用C#语言和HttpClient类来实现一个简单的爬虫程序,从微博网站上抓取热点话题的数据,并进行一些基本的分析和可视化。
C#和HttpClient结合示例:微博热点数据分析
|
6月前
|
定位技术 API C#
C# 高德地图WebApi对接示例
1、登录或注册高德地图开放平台然后申请应用key(需要认证个人或企业开发者) 高德开放平台 | 高德地图API (amap.com) 2、创建新应用,为新应用添加key,完成第一项后即可看到key管理 3、具体的开发文档、接口入参出参以及结果示例等详见高德地图开放平台官网 地理/逆地理编码-API文档-开发指南-Web服务 API | 高德地图API (amap.com) 4、直接书写具体示例 开发语言:C# 开发工具:visual studio 2019 开发项目类型:控制台程序 //
61 1
C# 高德地图WebApi对接示例
|
7月前
|
Oracle 架构师 关系型数据库
C#反射应用之实现动态可配置可扩展框架的简单示例
C#反射应用之实现动态可配置可扩展框架的简单示例
|
7月前
|
Oracle 关系型数据库 MySQL
超简单的C#可配置可扩展基础框架示例
超简单的C#可配置可扩展基础框架示例
C#简单接口和继承示例详解——快速入门
C#简单接口和继承示例详解——快速入门
|
9月前
|
程序员 C#
C#简单继承示例详解——快速入门
C#简单继承示例详解——快速入门