首页 > 编程语言 >C#在文件后面追加byte字节

C#在文件后面追加byte字节

时间:2023-05-19 22:33:18浏览次数:39  
标签:fs 字节 C# targetFileName fileName fileDesc new byte

有时候我们想要让某些文件的摘要信息存放在文件尾部,需要时读取出来,不需要时放到最后面,有没有解决方案呢?当然有。

/// <summary>
/// 文件描述
/// </summary>
public class FileDesc
{
    /// <summary>
    /// 原文件名
    /// </summary>
    public string FileName { get; set; }
    /// <summary>
    /// 文件标记
    /// </summary>
    public string FileTag { get; set; }
}

在尾部增加描述并修改文件的格式:

FileDesc fileDesc = new FileDesc()
{
    FileName = fileName,
    FileTag = "duanjt"
};
var str = JsonConvert.SerializeObject(fileDesc);
byte[] firstBytes = Encoding.UTF8.GetBytes(str);
byte[] resultBytes = new byte[1024];
firstBytes.CopyTo(resultBytes, 0);

using (FileStream fs = new FileStream(fileName, FileMode.Open))
{
    using (BinaryWriter bw = new BinaryWriter(fs))
    {
        fs.Seek(fs.Length, SeekOrigin.Begin);  //默认是从0开始的,需要移动位置,否则会覆盖文件原有数据
        bw.Write(resultBytes);
    }
}

string targetFileName = Path.Combine(Path.GetDirectoryName(fileName), times + ".zip");
File.Move(fileName, targetFileName);

AppendMsg(fileName + "==>" + targetFileName);
File.Delete(fileName);

删除尾部的描述信息

FileDesc fileDesc = null;
using (FileStream fs = new FileStream(fileName, FileMode.Open))
{
    byte[] headerBytes = new byte[1024];
    if (fs.Length <= headerBytes.Length)
    {
        AppendMsg(fileName + " 不是加密文件");
        continue;
    }
    fs.Seek(fs.Length - headerBytes.Length, SeekOrigin.Begin);
    fs.Read(headerBytes, 0, headerBytes.Length);
    string jsonString = Encoding.UTF8.GetString(headerBytes);
    fileDesc = JsonConvert.DeserializeObject<FileDesc>(jsonString);
    if (fileDesc.FileTag != "duanjt")
    {
        AppendMsg(fileName + " 不是加密文件");
        continue;
    }
    fs.SetLength(fs.Length - headerBytes.Length);
}

string targetFileName = Path.Combine(Path.GetDirectoryName(fileName), fileDesc.FileName);
File.Move(fileName, targetFileName);
AppendMsg(fileName + "==>" + targetFileName);
File.Delete(fileName);

核心思路:FileStream.SetLength直接就截取了前面部分。fs.Seek设置从什么位置开始读写。

标签:fs,字节,C#,targetFileName,fileName,fileDesc,new,byte
From: https://www.cnblogs.com/duanjt/p/17416475.html

相关文章

  • 第一代AIGC硬件悄然爆发
    文|智能相对论作者|叶远风看起来,这可能是一副正常的黑框眼镜,你戴上去彬彬有礼、斯斯文文;实际上,它里边还装了一个“小伙伴”,你随时可以与它交流,谈天说地或者提出各种问题接受它的帮助;你化身为了科技极客,成为科幻片里带着有超能力的“小跟班”闯荡世界的酷炫主角……这款眼镜是天......
  • #yyds干货盘点# LeetCode程序员面试金典:最大间距
    1.简述:给定一个无序的数组 nums,返回数组在排序之后,相邻元素之间最大的差值。如果数组元素个数小于2,则返回0。您必须编写一个在「线性时间」内运行并使用「线性额外空间」的算法。 示例 1:输入:nums=[3,6,9,1]输出:3解释:排序后的数组是[1,3,6,9],其中相邻元素(3,6)......
  • LeetCode 105. 从前序与中序遍历序列构造二叉树
    题目链接:LeetCode105.从前序与中序遍历序列构造二叉树题意:给定两个整数数组 preorder和inorder ,其中 preorder是二叉树的先序遍历,inorder 是同一棵树的中序遍历,请构造二叉树并返回其根节点。解题思路:模拟手动构建的过程,注意下标的变化。完整代码如下:/***Defini......
  • pta_【CPP0039】vector应用测试
    #include<iostream>#include<vector>#include<algorithm>usingnamespacestd;intmain(void){inti,a[10],b;for(i=0;i<10;i++){scanf("%d",&a[i]);}scanf("%d",&b);//插入的数{vector<int&......
  • 宏电5G RedCap工业智能网关重磅发布,补齐5G“中间地带”
    5G商用三年多以来您是否还在为以下问题而困惑? 1. 传统5G规模部署成本太高?宏电5GRedCap工业智能网关低成本易部署,传输速率满足高清视频上行传输需求,并能大幅减少有线网络铺设,降低客户使用5G的成本。 2. 传统5G能耗大加重供电压力?低功耗高可靠宏电5GRedCap工业网关低功耗高可靠......
  • 关键字static详解
    static是常见的函数和变量(c++中类)的修饰符关键字,他主要用来控制变量的生命周期、作用域和储存方式。1、修饰局部变量a.储存区由栈变为静态变量区。b.生命周期由局部变为全局。c.作用域不变。注意:static修饰的变量只执行初始化一次。2、修饰全局变量a.变量的储存区域在全局数据区的......
  • C#调用WebService方法
    1.已知WebService接口的URL,直接调用在VS中,添加服务引用--高级--添加web引用直接输入webserviceURL然后,直接实例化该命名空间下的类的对象,调用该接口下的各个方法即可。2.动态调用以下为帮助类:usingMicrosoft.CSharp;usingSystem;usingSystem.CodeDom;usingSystem.CodeDom......
  • const关键字详解
    1、const修饰普通变量变量变为常变量,具有常数性质的变量。不可以修改(只读)。2、const修饰指针inta=10;constint*p1=&a;intconst*p2=&a;int*constp3=&a;第一个const修饰的是*p1,也就是不可以通过指针引用去修改指针所指向变量的值。第二个与第一个效果相同,写法不一样而已。......
  • 探索智慧PC,华为与苹果一起共创PC新未来
    市场连续负增长,产业在发出什么样的信号?PC市场在2022年出现大幅下滑之后,今年一季度的数据更加不乐观。Canalys报告显示一季度同比下降了33%,并且是连续四个季度出现两位数下降。PC被称为夕阳产业十年了,还能找到第二曲线吗?「 No.1 」未来只有一种PC——智慧PC不仅PC大盘下滑,头部五大......
  • C语言函数大全-- _w 开头的函数(4)
    C语言函数大全本篇介绍C语言函数大全--_w开头的函数1._wstrtime1.1函数说明函数声明函数功能wchar_t*_wstrtime(wchar_t*buffer);用于获取当前系统时间并返回一个宽字符字符串表示,格式为"HH:MM:SS"(小时:分钟:秒)参数:buffer:一个指向wchar_t类型数组......