风飘扬 发表于 2008-1-23 16:55:46

怎样查看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集的修复方法 很少有人知道。为了让更多人知道,希望您顶一下,谢谢了!本人很不容易才找到修复方法的。

风飘扬 发表于 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;

                    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();
}

流水落花 发表于 2008-1-23 17:16:47

不懂,只学过一点C++,早忘完了,祈祷这辈子别再碰编程

幽忧左 发表于 2008-1-23 18:32:29

飘扬。。

  我真的看不懂是什么东西

▄︻┻┳═ 发表于 2008-1-23 18:35:56

路过眼前一花.............
页: [1]
查看完整版本: 怎样查看csf格式的文件头代码