【OS】09 - 主引导程序控制权的转移

文章详细描述了一个名为`QByteArrayReadFileContent`的函数,用于从Fat12文件系统中读取指定文件的内容,通过逐簇读取并解析Fat表获取文件数据。函数首先查找根目录条目,然后根据Fat表定位每个数据簇,确保有效读取并复制到返回的QByteArray对象中。
摘要由CSDN通过智能技术生成

01
在这里插入图片描述

02
在这里插入图片描述


/*
函数功能:读取指定文件内容
参数3:指定的文件名
*/
QByteArray ReadFileContent(Fat12Header& rf, QString p, QString fn)
{
    QByteArray ret;
    RootEntry re = FindRootEntry(rf, p, fn);
 
    if( re.DIR_Name[0] != '\0' )
    {
        QVector<ushort> vec = ReadFat(rf, p);
        QFile file(p);
 
        if( file.open(QIODevice::ReadOnly) )
        {
            char buf[512] = {0}; // 每次读一簇,也就是一个扇区的大小
            QDataStream in(&file);
            int count = 0;
 
            ret.resize(re.DIR_FileSize);//返回值对象的大小,也就是目标文件的大小


            
            // j表示数据簇的编号,i每次读取一个数据簇的大小512字节
            // j=vec[j] j的这种改变方式是因为fat表象中记录的是数据簇的地址,
            for(int i=0, j=re.DIR_FstClus; j<0xFF7; i+=512, j=vec[j])
            {
                file.seek(rf.BPB_BytsPerSec * (33 + j - 2)); // 根据偏移地址来算的绝对地址,定位到第"0"簇的位置。
 
                in.readRawData(buf, sizeof(buf)); //每次读取一簇的数据
 
                for(uint k=0; k<sizeof(buf); k++)
                {
                    if( count < ret.size() ) // 确保读取到的是有效的字节,每次拷贝1个字节,count++
                    {
                        ret[i+k] = buf[k];//把读到的数据拷贝到返回值数组对象当中
                        count++;
                    }
                }
            }
        }
 
        file.close();
    }
 
    return ret;
}

03
bp指向目标文件的第一个簇
在这里插入图片描述

04
迭代的思想,首先验证加载文件内容的代码是正确的。
在这里插入图片描述

05
在这里插入图片描述

06
在这里插入图片描述

07
在这里插入图片描述

08
在这里插入图片描述

09
在这里插入图片描述

10
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值