怎样查看csf格式的文件头代码
如题。http://bbs.batong.net/archiver/tid-986794.html
此网址让我修改文件头代码,但是我不知道文件头代码如何查看?求助ing。
上面网址的内容如下:
优秀视频教程 VB编程与应用 下载及第21集的修复!重点是修复!!
优秀视频教程 VB编程与应用 下载及第21集的修复!重点是修复!!
Visual Basic,简称VB,是当今世界上应用最广泛的编程语言之一,它也被公认为是编程效率最高的一种编程方法。无论是开发功能强大、性能可靠的商务软件,还是编写能处理实际问题的实用小程序,VB都是最快速、最简便的方法。
总共29集的 VB编程与应用(宁波电大) 是学习 VB编程的优秀视频教程。
下载 VB编程与应用(宁波电大) : http://www.123w.net/Software/Catalog22/6643.html
是csf格式的视频文件,用 Teaching Player 播放器来播放。
下载后将文件类型改成“.csf”格式(直接改扩展名)。
第21集存在问题,不能正常播放。
VB编程与应用21.csf 的修复方法:
用 VB编程与应用20.csf 的开头第二,第三行文件头代码替代 VB编程与应用21.csf 的开头第二,第三行文件头代码。
==========================================================
第21集 VB编程与应用21.csf ,本人从几处下载的都不能播放,某些网站则在网页中注明 第21集存在问题,不能播放,无法修复。说明 第21集的修复方法 很少有人知道。为了让更多人知道,希望您顶一下,谢谢了!本人很不容易才找到修复方法的。 我还找到了关于csf格式的一点资料,但还是不知如何操作,请高手赐教。
文件头:
struct CsfHeader
{
int id;
int flag1;
int count1;
int count2;
int zero;
int flag2;
}
文件头:
4个字节:文件类型标记“CSF_(空格)”
4个字节的flag1,暂时不清楚是做什么的(不过pd貌似知道)
32位整数(4个字节),表示记录数量
32位整数(4个字节),另一个数量,暂时不知道是干什么的
32位整数(4个字节),常数0
4个字节的flag2,暂时不清楚是做什么的
文件头后边紧接着若干条记录,每个记录的格式:
一个标记“LBL_(空格)”,4字节
4个字节的flag
一个32位整数,表示接下来的记录名称(如:NAME:GACNST)的长度
若干字节,每个字节代表一个半角字符
如果(flag & 1)不等于0
4个字节的flag2,可以是“STR_(空格)”或“STRW”
一个32位整数,表示接下来的记录内容(如:盟軍建造場)的长度x
一段长度为2*x的数据,从数据结构上对应一个字符串。逐个字节(无符号sbyte)读出时需要取字节值的相反数并减1,这样才能和一个字符串对应上。
如果之前的flag2是STRW,那么这个记录会有附加数据
首先是一个32位整数,表示附加数据(字符串)的长度a
接下来a个字节,附加数据
如果(flag & 1)等于0,该项记录内容为空,只有名称,后边不再有这条记录的其它数据
读取文件代码:
unsafe void Read(Stream src)
{
BinaryReader br = new BinaryReader(src);
CsfHeader header;
header.id = (FileID)br.ReadInt32();
if (header.id == FileID.Csf)
{
header.flag1 = br.ReadInt32();
header.count1 = br.ReadInt32();
header.count2 = br.ReadInt32();
header.zero = br.ReadInt32();
header.flag2 = br.ReadInt32();
data = new Dictionary<string, KeyValuePair<string, string>>(header.count1);
for (int i = 0; i < header.count1; i++)
{
int id = br.ReadInt32();
if (id == CsfHeader.LabelID)
{
int flag = br.ReadInt32();
int len = br.ReadInt32();
char[] chs = br.ReadChars(len);
string key = new string(chs).ToUpper();
if ((flag & 1) != 0)
{
id = br.ReadInt32(); // label内容类型
// 读字符串(内容)
len = br.ReadInt32(); //长度
sbyte[] value = new sbyte;
for (int j = 0; j < value.Length; j++)
value = (sbyte)(-br.ReadSByte() - 1);
GCHandle h = GCHandle.Alloc(value, GCHandleType.Pinned);
string val = new string((char*)h.AddrOfPinnedObject().ToPointer());
h.Free();
string ext = null;
// 读附加数据
if (id == CsfHeader.WStringID)
{
len = br.ReadInt32();
ext = new string(br.ReadChars(len));
}
data.Add(key, new KeyValuePair<string, string>(ext, val));
}
else
data.Add(key, new KeyValuePair<string, string>("", ""));
}
}
}
else
throw new FormatException(src.ToString());
br.Close();
} 不懂,只学过一点C++,早忘完了,祈祷这辈子别再碰编程 飘扬。。
我真的看不懂是什么东西 路过眼前一花.............
页:
[1]