中易网

【高悬赏】C#怎样删除二进制文件某部分的内容

答案:2  悬赏:80  
解决时间 2021-03-03 15:21
【高悬赏】C#怎样删除二进制文件某部分的内容
最佳答案
可以通过对二进制文件操作(内容搜索、数据截取)后,进行修改,或者清空删除内容。
private void button2_Click(object sender, EventArgs e)
{
var list = new List();
byte[] buf;
byte[] bytStart = {0x70, 0x6D, 0x6A, 0x73, 0x7A, 0x6A, 0x66, 0x72, 0x6D};
byte[] bytEnd = { 0x70, 0x66, 0x72, 0x61, 0x6D, 0x65, 0x65, 0x6E, 0x64 };
using (var fs = new FileStream(@"D:\avi\6.lxf",FileMode.Open))
{
buf = new byte[fs.Length];
var len = (int)fs.Length;
fs.Read(buf, 0, len);
}
var fStart = 0;
var fEnd = 0;
var offset = 0;
do
{
fStart = IndexOf(buf, bytStart, offset);
fEnd = IndexOf(buf, bytEnd, fStart);
Debug.Print("{0} ~ {1}",fStart,fEnd);
if (fStart == -1||fEnd==-1)
{
offset = buf.Length;
}
else
{
var frame = new Frame
{
Start = fStart + bytStart.Length,
End = fEnd,
};
frame.Length = frame.End - frame.Start;
frame.Data = new byte[frame.Length];

//内容截取
Array.Copy(buf, frame.Start, frame.Data, 0, frame.Length);
list.Add(frame);
offset = fEnd;
offset += bytEnd.Length;
}

}
while (offset < buf.Length);
}

  
查找字符串的方法

///
/// 报告指定的 System.Byte[] 在此实例中的第一个匹配项的索引。
///

/// 被执行查找的 System.Byte[]。
/// 要查找的 System.Byte[]。
/// 如果找到该字节数组,则为 searchBytes 的索引位置;如果未找到该字节数组,则为 -1。如果 searchBytes 为 null 或者长度为0,则返回值为 -1。
internal int IndexOf(byte[] srcBytes, byte[] searchBytes,int offset = 0)
{
if (offset == -1) { return -1; }
if (srcBytes == null) { return -1; }
if (searchBytes == null) { return -1; }
if (srcBytes.Length == 0) { return -1; }
if (searchBytes.Length == 0) { return -1; }
if (srcBytes.Length < searchBytes.Length) { return -1; }
for (var i = offset; i < srcBytes.Length - searchBytes.Length; i++)
{
if (srcBytes[i] != searchBytes[0]) continue;
if (searchBytes.Length == 1) { return i; }
var flag = true;
for (var j = 1; j < searchBytes.Length; j++)
{
if (srcBytes[i + j] != searchBytes[j])
{
flag = false;
break;
}
}
if (flag) { return i; }
}
return -1;
}

实本类

public class Frame
{
public int Start { get; set; }
public int End { get; set; }
public int Length { get; set; }
public byte[] Data { get; set; }
}
全部回答
单个文件应该只能一次加载吧。。实在UI太卡就新进程异步调用,
然后用progressBar表示一下进度,在界面上会好看一些。。
另外想到一个主意,分卷压缩,然后找第一个文件。。
没实验过,个人意见
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
愉此一生电视剧大结局是什么
在清华大学住,在哪里给小孩儿打预防针
这题怎么巧算
入手两天i9300系统更新后反应变慢是正常现象
unix在使用make命令时出错,makefile文件如下
江西浔鑫建设工程有限公司地址在什么地方,想
摩西是如何带领犹太人走出埃及,开始新生活的
黄家麻窝这个地址在什么地方,我要处理点事
下面是某城市的街道图 若从a走到b只能由北向
请问这种鱼叫什么鱼(很小很小,经常用来做鱼
新天地数码照相建西店这个地址在什么地方,我
left怎么读
哈弗H6是运动版质量好还是升级版质量好,
彝良县农机协会这个地址在什么地方,我要处理
爱人美美容美体生活馆地址在什么地方,想过去
推荐资讯
RowBounds能在ssm用吗
辽宁海澄流体科技有限公司在哪里啊,我有事要
建三江到佳木斯的客车最晚是几点
哪有看守所需要手工活?
一座能开派对的别墅至少多少钱
特别刺激的音乐
厦门市湖里区城市管理行政执法局湖里中队在什
有什么东西是用两样东西集合成的
顺华五金商行这个地址在什么地方,我要处理点
月亮岛渔具连锁店地址在哪,我要去那里办事
小孩想在上海上幼儿园需要什么条件
欧妮美甲地址在哪,我要去那里办事
手机登qq时,显示手机磁盘不足,清理后重新登
刺客的套装怎么选啊?