小菜鸟,请教一个问题。

圆圆胖胖的车车 2014-08-09 06:09:40
我有一个文件,是由一个2个部分合并成的,大家可以想象成一个压缩文件类似于7zip.


里面放了很多个文件
格式是

File1 {
//文件名
ASCIIZ String of file name
//文件大小
UINT32 File size.
//真实数据
Data of file.
}

File2 {
//文件名
ASCIIZ String of file name
//文件大小
UINT32 File size.
//真实数据
Data of file.
}

File3......Filen

在windows中应该如何去读取这个文件信息呢?
新手哈,能贴出代码就更好了哈。

VS2010...熟悉中。。。

先谢谢咯~

...全文
206 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
hhhh63 2014-08-29
  • 打赏
  • 举报
回复

// 定义结构
struct structFile
{
    CString strName;
    UINT32 nSize;
    PBYTE pData;
}
// 假设十个文件
structFile Files[10];

// 二进制方式读文件
CFile file;
CFileException e;
BOOL bOk = file.Open("C:\\abc\\yourname.txt",CFile::modeRead|CFile::typeBinary,&e);
if (!bOk)
{
    if(CFileException::badPath == e.m_cause)
    {
        TRACE("错误文件路径\n");
        return;
    }
}
int iLen = file.GetLength();
PBYTE pData = new BYTE[iLen];
file.ReadHuge(pData,iLen);
delete [] pData;

// 解析文件
PBYTE p = pData;
for( int i = 0; i < 10; i++ )
{
    Files[i].strName = PCTSTR(p);  // 取文件名,以零结尾。
    p += strName.GetLength() + 1;  // 文件名长度,这一句和字符编码有关,如果是unicode码,乘以2
    Files[i].nSize = UINT32( p );  // 数据长度
    p += sizeof(UINT32);  // 移动到数据
    Files[i].pData = p;  // 指向数据
    p += Files[i].nSize;  // 移到下一个文件
}
以下代码假设文件名是变长的,以0结尾,多字节编码方式。
devmiao 2014-08-09
  • 打赏
  • 举报
回复
在C++里面定义一个结构体,表示文件的格式,然后开辟缓冲区,用::ReadFile读取,将缓冲区的指针转换成结构体的类型,就能读取了。

7,540

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 VC.NET
社区管理员
  • VC.NET社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧