// 将tasks保存到二进制文件中
public Boolean saveToFile(String file)
{
    try
    {
        )
        {
            // 没任务就不存
            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;
    }
}

C# 将链表存入二进制文件及读取二进制文件得到链表示例的更多相关文章

  1. 信息管理代码分析<二>读取二进制文件数据

    first和end做为全局变量,分别指向链表的头和尾.建立链表的方式也比较简易,从二进制文件数据块中,依次从头到尾读取,每读取一个就建立一个结点. /*基本模型*/ EMP *emp1; while( ...

  2. 用 C# 读取二进制文件

    当想到所有文件都转换为 XML时,确实是一件好事.但是,这并非事实.仍旧还有大量的文件格式不是XML,甚至也不是ASCII.二进制文件仍然在网络中传播,储存在磁盘上,在应用程序之间传递.相比之下,在处 ...

  3. 获取博客积分排名,存入数据库,读取数据进行绘图(python,selenium,matplotlib)

    该脚本的目的:获取博客的排名和积分,将抓取时间,排名,积分存入数据库,然后把最近的积分和排名信息进行绘图,查看积分或者排名的变化情况. 整个脚本的流程:是利用python3来编写,利用selnium获 ...

  4. C语言实现数据机构链表的基本操作(从键盘输入生成链表、读取数组生成链表)

    利用头插法实现逆置 下面简单介绍一下,算法思想结合图示看 算法思想:"删除"头结点与链表其他结点的原有联系(即将头结点的指针置空),再逐个插入逆置链表的表头(即"头插&q ...

  5. c++单链表冒泡排序(交换结点),链表增删改查,运算符重载

    #include <iostream> #include <stdlib.h> #include <time.h> #include <fstream> ...

  6. java使用poi读取ppt文件和poi读取excel、word示例

    java使用poi读取ppt文件和poi读取excel.word示例 http://www.jb51.net/article/48092.htm

  7. 牛客网:将两个单调递增的链表合并为一个单调递增的链表-Python实现-两种方法讲解

    方法一和方法二的执行效率,可以大致的计算时间复杂度加以对比,方法一优于方法二   1. 方法一: 思路: 1. 新创建一个链表节点头,假设这里就叫 head3: 2. 因为另外两个链表都为单调递增,所 ...

  8. LeetCode初级算法--链表02:合并两个有序链表

    LeetCode初级算法--链表02:合并两个有序链表 搜索微信公众号:'AI-ming3526'或者'计算机视觉这件小事' 获取更多算法.机器学习干货 csdn:https://blog.csdn. ...

  9. [LC]83题 Remove Duplicates from Sorted List(删除排序链表中的重复元素)(链表)

    ①英文题目 Given a sorted linked list, delete all duplicates such that each element appear only once. Exa ...

随机推荐

  1. luogu2754 星际转移问题

    源向地球连 月球向汇连 每一天往下一天连 飞船上一天与这一天连 枚举答案 #include <iostream> #include <cstring> #include < ...

  2. 解决MySQL版本之间造成的乱码、数据查询不出的问题

    在数据库连接字符串上加  charset=utf8 <connectionStrings> <add name="XJRDSModels" connectionS ...

  3. c/c++内存泄露的检测方法

    此文内容摘自 https://zhuanlan.zhihu.com/p/22664202 作为   从零开始的 JSON 库教程(三):解析字符串解答篇  的笔记 1A. Windows 下的内存泄漏 ...

  4. 正则表达式与python中re模块

    一个网站,正则表达式入门的,很好 http://www.jb51.net/tools/zhengze.html 下面这个包含对python中re的介绍,也是很不错的http://www.w3cscho ...

  5. Bind Enum To DropDownList ?

    0. 准备测试数据 0.1 : 枚举 using System; using System.Collections.Generic; using System.Linq; using System.W ...

  6. BFC浅析

    1.定义 BFC(Block formatting context)即"块级格式化上下文".它是一个独⽴的渲染区域,只有Block-level box参与, 它规定了内部的Bloc ...

  7. 【HNOI2011/bzoj2337】XOR和路径

    第二道高斯消元练习题 题意 一张无向图,从点 $1$ 出发每次随机选一条出边走,走到 $n$ 停止,求经过的所有边权异或和的期望. $n\le 100$ 题解 注意一点,异或和的期望 $≠$ 期望的异 ...

  8. bzoj[Usaco2008 Nov]mixup2 混乱的奶牛 状压dp

    [Usaco2008 Nov]mixup2 混乱的奶牛 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 1204  Solved: 698[Submit ...

  9. Fiddler修改请求的参数,重新执行请求

    打开Fiddler4,打开浏览器,输入请求地址,例如:http://www.meizu.com 1.  拿出host信息:tongji.meizu.com 2.  拿出URL信息:/flow/mc?v ...

  10. uva 11732 (trie树)

    题意:求N个字符串两两比较,共比较了多少次? #include<iostream> #include<cstring> #include<cstdio> using ...