永发信息网

C#自定义文件类型的问题 文件读取时候如何获得数据的偏移量

答案:1  悬赏:50  手机版
解决时间 2021-04-12 23:55
  • 提问者网友:像風在裏
  • 2021-04-12 18:05
我的文件结构是这么写的 包括 头 主体 跟尾部
我想问个问题
我 生成的文件是由多个图片组成 主体部分记录着图片的具体参数 比如位于窗口的坐标
当我需要用我 写的程序读取这些图片的时候怎么读取他的坐标点呢?
来电思路 怎么定义主体部分?
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
////定义重构文件主体部分即素材信息
namespace filetest
{
public class FileBody
{
private int x;
private int y;
private int div;
private int filetype;
private long filesize;
private byte[] fileio;
/// <summary>
/// 素材的X坐标
/// </summary>
public int X
{
get
{
return x;
}
set
{
x = value;

}
}
/// <summary>
/// 素材的 Y 坐标
/// </summary>
public int Y
{
get
{
return y;
}
set
{
y = value;
}


}
/// <summary>
/// 记录图层位置
/// </summary>
public int DIV
{
get
{
return div;
}
set
{
div = value;
}
}
/// <summary>
/// 记录文件类型
/// </summary>
public int FileType
{
get
{
return filetype;

}
set
{
filetype = value;
}
}
/// <summary>
/// 记录文件的字节数
/// </summary>
public byte[] FileIO
{
get
{
return fileio;
}
set
{
fileio = value;
}
}

}
}

文件主体由多个文件读取 我解析文件的时候要把素材解压出来 这个每个文件的偏移怎么取?

不用序列化 因为我要读取相关配置信息 配置信息在文件头

最佳答案
  • 五星知识达人网友:走死在岁月里
  • 2021-04-12 18:26

这个很简单嘛~~


文件里的N个图片想读哪个读哪个,具体实现看下面说明


你提到过有个文件头,这个设计是对的,文件头中让他包含上 这个文件里面的图片数目(使用int型的就可以),其他的你还需要什么信息也放在头里。 文件尾我觉得不需要你根据你的情况。


文件主体中就按照你定义的private int x;
private int y;
private int div;
private int filetype;
private long filesize;
private byte[] fileio;
这几个数据依次写入文件,把你要保存的图片都循环着写入。


最后的格式应该是




读取的时候:


这里文件头只有一个int的数据,所以打开文件后直接读取sizeof(int)位的数据 保存在一个int型变量中,这样文件头就读出来了。


现在再往下读就是文件体了。


继续读取3个sizeof(int)就是y,div filetype分别被读出来了,下一个sizeof(long) filesize就读出文件长度,然后根据这个filesize去把文件内容读出就可以了,然后继续循环其他的文件。


你想定位到某一个图片的坐标,比如读第3个,那就把前面两个数据占的数据位全都跳过去直接定位到第三个文件的开始处(sizeof(int)*4+sizeof(long))*2+文件1的filesize+文件2的filesize 别忘了文件头的那个sizeof(int) , 这样就定位到了文件3的开始处就是x所在的位置,然后读出你想要的数据来行了。

我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯