資源簡介
使用C++對.torrent文件進行解析。后期也可以根據需要編寫自己需要的函數。

代碼片段和文件信息
#include?“StdAfx.h“
#include?“TorrentFile.h“
CTorrentFile::CTorrentFile(?const?wstring?&?fileName?)?:?m_strFileName?(fileName)
?m_nInt(0)
{
m_ifstream.open?(?m_strFileName.c_str()??ios::binary?|?ios::out?);
m_vecString.clear();
m_strString.clear();
}
CTorrentFile::~CTorrentFile(void)
{
if(m_ifstream.is_open())
m_ifstream.close();
}
int?CTorrentFile?::?readINT?(?ifstream?&?in)
{
char?len[128]?=?{0};
int?i?=?0;
while?(1)
{
char?p;
in.read(?&p??1);
if?(?p?==?‘:‘?||?p?==?‘e‘)
break;
else
len[i++]?=?p;
}
return?(atoi?(len));
}
string?CTorrentFile?::?readString?(?ifstream?&?in??const?int?&?len)
{
char?*?p?=?new?char[len?+1];
memset(?p??0??len+1);
in.read(p??len);
string?str?(p);
delete?[]?p?;
return?str;
}
void?CTorrentFile?::?getDataType?(?ifstream?&in?)
{
DataType?result;
char?p?;
in.read(&p?1);
if?(in.eof())
return?;
else
{
if?(?p?==?‘l‘)
{
result?=?DataType_LISTS;
getDataLIST(in);
}
else?if?(p?==?‘d‘?)
{
result?=?DataType_DICT?;
getDataDICT(in);
}
else?if?(p?==?‘i‘)
{
result?=?DataType_INT;
getDataINT?(in);
}
else?if?(p?==?‘e‘)
{
result?=?DataType_END;
getDataType?(in);
}
else
{
result?=?DataType_STRINGS;
getDataSTRING?(in);
}
}
}
DataType??CTorrentFile?::?readDataType?(ifstream?&?in)
{
DataType?result?;
char?p?;
in.read(&p?1);
if?(‘d‘?==?p)
result?=?DataType_DICT?;
else?if?(‘l‘?==?p)
result?=?DataType_LISTS;
else?if?(‘i‘?==?p)
result?=?DataType_INT?;
else?
result?=?DataType_STRINGS;
return?result;
}
void??CTorrentFile?::?getDataINT?(?ifstream?&in?)
{
m_nInt?=??readINT(?in?);
cout< getDataType(in);
}
void?CTorrentFile::?getDataSTRING?(?ifstream?&?in)
{
in.seekg(-1?ios::cur);
int?len?=?readINT(in);
m_strString?=?readString(in?len);
cout< getDataType(in);
}
void?CTorrentFile::getDataDICT?(ifstream?&?in)
{
int?len?=?readINT(?in?);
m_strString?=?readString(?in??len);
m_vecString.push_back(?m_strString);
for?(?int?i?=?0?;?i cout< cout?< m_vecString.clear();
getDataType(in);
}
void??CTorrentFile?::?getDataLIST?(?ifstream?&?in?)
{
DataType??dtTemp?=??readDataType(in);
if?(?dtTemp?==??DataType_INT)
getDataINT(?in);
else?if?(?dtTemp?==?DataType_STRINGS?)
getDataSTRING(?in);
else?if?(?dtTemp?==?DataType_END)
return?;
else?if?(?dtTemp?==?DataType_DICT?)
getDataDICT?(in);
else?
getDataLIST(in);
}
void?CTorrentFile?::?ToString?(?)
{
getDataType(?m_ifstream?);
m_ifstream.close();
}
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件???????2738??2015-01-15?15:56??C++解析Torrent文件類\TorrentFile.cpp
?????文件???????1052??2015-01-15?16:16??C++解析Torrent文件類\TorrentFile.h
?????目錄??????????0??2015-01-15?16:17??C++解析Torrent文件類
-----------?---------??----------?-----??----
?????????????????3790????????????????????3
評論
共有 條評論