ext2read

 

最近在采用ext2read读取读硬盘里ext2文件系统分区文件的数据,该开源库是读取MBR分区下的各分区数据,对ext2read库里面的主要接口大概整理下:

1.int Ext2Read::scan_partitions(char *path, int diskno)          
scanMBR分区分区头及4个分区表,获取各分区数据(分区起始扇区,分区总的扇区数,如果是GPT分区,需根据情况分析。

2. Ext2Partition::Ext2Partition(lloff_t size, lloff_t offset, int ssize, FileHandle phandle, LogicalVolume *vol)
 size:分区末尾扇区号
offset:分区起始扇区号
phandle:文件句柄
LogicalVolume :这个我没有用到(NULL),应该是有无逻辑分区。。。
该构造函数可以获取root节点的inode表中数据(Ext2File)
GPT分区只要确定了分区起始扇区和分区扇区数(该数值貌似库里面并没有用到),就可调用此接口,如果分区的镜像文件直接读取的分区数据,offset置为0即可。

3. bool Ext2CopyProcess::copy_file(QString &destfile, Ext2File *srcfile)
该接口为拷贝文件到自己设定的路径,不过它实现的是从当前目录下拷贝文件,而不是从根目录搜索文件,再保存。其中srcfile为当前文件的inode表项

4.bool Ext2CopyProcess::copy_folder(QString &path, Ext2File *parent)
同样,从当前目录下拷贝目录中的文件夹。parent为当前目录的的inode表项。

如若从root开始搜索文件
Ext2File *Ext2Partition::read_dir(EXT2DIRENT *dirent)读取目录文件的数据块数据,并获取一个文件/目录的项的inode表项

if(!dirent->dirbuf)
    {
        dirent->dirbuf = (EXT2_DIR_ENTRY *) new char[blocksize];   //new出一个数组
        if(!dirent->dirbuf)
            return NULL;
        ret = read_data_block(&dirent->parent->inode, dirent->next_block, dirent->dirbuf);
        if(ret < 0)
            return NULL;

        dirent->next_block++;
    }

    again:
    if(!dirent->next)
        dirent->next = dirent->dirbuf;
    else
    {
        pos = (char *) dirent->next;
        dirent->next = (EXT2_DIR_ENTRY *)(pos + dirent->next->rec_len);
        if(IS_BUFFER_END(dirent->next, dirent->dirbuf, blocksize))
        {
            dirent->next = NULL;
            if(dirent->read_bytes < dirent->parent->file_size)
            {
                //LOG("DIR: Reading next block %d parent %s\n", dirent->next_block, dirent->parent->file_name.c_str());
                ret = read_data_block(&dirent->parent->inode, dirent->next_block, dirent->dirbuf);
                if(ret < 0)
                    return NULL;

                dirent->next_block++;
                goto again;
            }
            return NULL;
        }
    }

    dirent->read_bytes += dirent->next->rec_len;
    filename.assign(dirent->next->name, dirent->next->name_len);
    if((filename.compare(".") == 0) ||
       (filename.compare("..") == 0))
        goto again;                                                    //以上,读取目录文件中的一个文件夹/文件夹项,保存在dirent->next


    newEntry = read_inode(dirent->next->inode);     //读取该文件夹/文件项的inode表项内容
    if(!newEntry)
    {
        LOG("Error reading Inode %d parent inode %d.\n", dirent->next->inode, dirent->parent->inode_num);
        return NULL;
    }

    newEntry->file_type = dirent->next->filetype;
    newEntry->file_name = filename;

    return newEntry;                            //返回inode表项的内容(Ext2File )

 

如若需要从根目录下查找一个文件,需要多次调用read_dir,并判断是否是所要查找的文件夹/文件。 目录文件里面含有文件夹/文件标识,并通过判断文件夹/文件名称来判断就可以。

 

 

 

调试过程中遇到的问题:

读取数据块中的数据时,存放数据的内存区域必须要大于等于blocksize,否则保存数据时会出错。

即int Ext2Partition::read_data_block(EXT2_INODE *ino, lloff_t lbn, void *buf)中buf new出来的空间必须大于等于blocksize,其实blocksize就可以了,如果读一次即存储的话。如果new char[filesize],在数据边读边存情况下没有问题,当文件大小低于blocksize时,读取一个数据块就会出错。

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: ext2read是一款免费的软件,可以帮助我们读取U盘中的ext2和ext3文件系统。U盘常常使用FAT32或NTFS文件系统来格式化,但是有时我们可能会遇到U盘使用ext2或ext3文件系统的情况。这时候,使用常规的Windows操作系统来读取U盘中的文件就不太方便了。 ext2read的作用就是解决这个问题,它提供了一个简单易用的界面,可以让我们在Windows操作系统下访问和浏览U盘中的ext2和ext3文件系统。只需安装ext2read软件,并将U盘插入电脑,软件会自动识别并显示出U盘中的文件和文件夹。 使用ext2read可以轻松地查看、复制和转移U盘中的文件,就像在Windows资源管理器中操作一样简单。我们可以选择指定的文件或文件夹,然后进行拷贝、剪切、粘贴等操作,方便地管理U盘中的数据。 另外,ext2read还支持对U盘进行快速格式化,以及文件系统的修复等功能。如果U盘中的文件系统出现了错误或损坏,我们可以使用ext2read进行修复,提高数据的可靠性和完整性。 总之,ext2read是一款非常实用的软件,能够帮助我们在Windows操作系统中读取和管理U盘中的ext2和ext3文件系统。它的简洁易用的界面和丰富的功能,使得我们能够更方便地处理U盘中的数据。 ### 回答2: ext2read是一款免费的软件,可以帮助用户读取U盘中的ext2和ext3文件系统。通过ext2read,我们可以在Windows操作系统下访问和浏览U盘中的Linux文件系统。 使用ext2read读取U盘非常简单。首先,我们需要将U盘插入电脑。然后,我们可以打开ext2read软件,并选择“File”菜单中的“Open Disk”选项。在弹出的窗口中,我们需要选择U盘所在的磁盘,并点击“OK”按钮。接下来,软件会自动扫描U盘,并显示出U盘中的文件和文件夹列表。 通过ext2read,我们可以像在Windows资源管理器中一样,浏览、复制、粘贴、删除、重命名和查看U盘中的文件。而且,我们还可以利用搜索功能快速定位所需的文件或文件夹。 通过ext2read,用户可以方便地在Windows操作系统下访问和管理U盘中的Linux文件系统,无需额外安装Linux系统或者使用虚拟机。这对于需要在Windows环境下与Linux文件进行交互的用户来说非常实用。 虽然ext2read功能强大,但需要注意的是,它只支持读取ext2和ext3文件系统,不支持ext4文件系统。此外,为了避免数据丢失或损坏,使用ext2read操作U盘时需要谨慎。及时退出软件、安全地拔出U盘,可以保证数据的完整性和安全性。 总之,ext2read是一个便捷实用的工具,可以帮助用户在Windows操作系统下读取U盘中的ext2和ext3文件系统,同时提供了简单而强大的操作界面,方便用户管理文件和文件夹。 ### 回答3: ext2read是一个软件工具,它可以帮助我们读取和访问U盘中的ext2、ext3和ext4文件系统。这些文件系统是在Linux系统中常见的格式,而在Windows操作系统中,通常无法直接识别和读取U盘中的这些文件系统。 使用ext2read可以方便地将U盘插入到Windows计算机上,然后使用它来查看、复制和编辑U盘中的文件和文件夹。通过这个工具,我们可以轻松地访问U盘中的各种数据,无论是文档、照片、音乐还是其他类型的文件。 使用ext2read的过程非常简单。首先,我们需要下载并安装这个软件工具。安装完成后,我们可以将U盘插入计算机,然后打开ext2read的界面。在软件界面中,我们可以选择需要读取的U盘分区,然后点击"Mount"按钮来挂载这个分区。 一旦分区挂载成功,我们就可以在ext2read的界面中浏览U盘中的文件和文件夹了。我们可以通过双击打开文件夹,查看其中的内容;可以右键点击文件或文件夹,选择复制、粘贴或删除等操作。使用ext2read,我们可以在Windows中像操作普通的文件一样来处理U盘中的文件。 总的来说,ext2read是一个便捷的工具,能够帮助我们在Windows操作系统中读取和访问U盘中的ext2、ext3和ext4文件系统。它有效地解决了Windows无法直接识别这些文件系统的问题,使我们能够方便地处理U盘中的文件和数据。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

木木晗晗

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值