国际米兰

 找回密码
 注册通行证

QQ登录

只需一步,快速开始

搜索
查看: 105|回复: 4
打印 上一主题 下一主题

怎样查看csf格式的文件头代码 [复制链接]

Primavera

海水派元老会首席长老

Rank: 9Rank: 9Rank: 9

帖子
7341
精华
0
CNB
1270
注册时间
2005-5-19

我的游戏:

跳转到指定楼层
楼主
发表于 2008-1-23 16:55:46 |只看该作者 |正序浏览
分享到:
如题。
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集的修复方法 很少有人知道。为了让更多人知道,希望您顶一下,谢谢了!本人很不容易才找到修复方法的。
分享到: QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
分享分享0 收藏收藏0 顶0 踩0
梨花香,愁断肠。千杯酒,解思量。世间事,皆无常。为情伤,笑沧桑。万行泪,化寒窗。一首梨花辞,几多伤离别。

Capitano

狙击

Rank: 14Rank: 14

帖子
18815
精华
0
CNB
10519
注册时间
2006-10-17
5#
发表于 2008-1-23 18:35:56 |只看该作者
路过眼前一花............. [ecms5]
专注曼蜜N年,可绕地球N圈/。

使用道具 举报

Prima Squadra

悟空滴小马甲

Rank: 10Rank: 10Rank: 10Rank: 10

帖子
8650
精华
3
CNB
8556
注册时间
2005-1-29
4#
发表于 2008-1-23 18:32:29 |只看该作者
飘扬。。

  我真的看不懂是什么东西 [ecms9]
    为你裸奔十三年,如今有件华丽衣裳了吧···

使用道具 举报

Presidente

邪恶的小正太

Rank: 35Rank: 35Rank: 35Rank: 35Rank: 35

帖子
70293
精华
45
CNB
26146
注册时间
2003-11-24
地板
发表于 2008-1-23 17:16:47 |只看该作者
[ecms5] 不懂,只学过一点C++,早忘完了,祈祷这辈子别再碰编程
一期荣华一盃酒

使用道具 举报

Primavera

海水派元老会首席长老

Rank: 9Rank: 9Rank: 9

帖子
7341
精华
0
CNB
1270
注册时间
2005-5-19
沙发
发表于 2008-1-23 16:58:17 |只看该作者
我还找到了关于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[len * 2];

                    for (int j = 0; j < value.Length; j++)
                        value[j] = (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();
}
梨花香,愁断肠。千杯酒,解思量。世间事,皆无常。为情伤,笑沧桑。万行泪,化寒窗。一首梨花辞,几多伤离别。

使用道具 举报

您需要登录后才可以回帖 登录 | 注册通行证

手机版|Archiver|国际米兰 ( 粤ICP备05005441号 )

GMT+8, 2024-11-16 10:05 , Processed in 0.031995 second(s), 14 queries , Gzip On, Eaccelerator On.

Powered by Discuz! X2

© 2001-2011 Comsenz Inc.

回顶部