我正在尝试获取一个 html 文件,它是位于 tar 文件中的文件之一,我有一些想法,我不知道它是否正确?如果我错了,请指出我。我的想法是——
我从 tar 文件中创建一个流并将该流存储在缓冲区中以便获得其内容,然后使用 strstr 命令搜索 tar 文件中的 html 文件(因为我知道在我的 tar 文件中,html 内容从“<!doctype html" 并以 <"/html>"结束,所以我将加载它们之间的内容,这实际上是 html 文件)。我的方法对吗??
问题是当我给缓冲区提供非常大的大小(但小于包含 html + 许多其他文件的 tar 文件的大小)时,它会在调试时产生堆栈溢出。但是当我给出小索引时,如果我在记事本中打开 tar 文件,它会显示位于启动中的其他文件的内容(我已经通过在记事本中打开 tar 文件进行检查,这些内容确实存在于 tar 文件中,但在开始时tar 文件,所以当我增加缓冲区的索引以访问位于文件中间的 html 文件(实际上需要非常大的索引)时,它会在调试时提供 stackoverflow)。我的代码是-
HRESULT AMEPreviewHandler:: CreateHtmlPreview(IStream *m_pStream) //this function is called from
// somewhere
ULONG CbRead;
const int Size= 115000 ;
char Buffer[Size+1];
(m_pStream)->Read(Buffer, Size, &CbRead );
Buffer[CbRead ] = L'\0';
char *compare= "<!doctype html"; //this we have to search in tar file
// content because the html file contents starts from here
char * StartPosition;
StartPosition = strstr (Buffer,compare); //StartPosition gives Bad
// pointer when Size is small on debugging at this small size i can see some contents in buffer which i
//can find in tar file at starting
__int64 count=0;
while (StartPosition!=NULL)
{
MessageBox(m_hwndPreview,L"hurr inside the while loop",L"BTN WND",MB_ICONINFORMATION);
count=StartPosition-Buffer+1; //to get the location of
//"<!doctype html";
}
MessageBox(m_hwndPreview,L"wafter the while loop in CreateHtmlPreview ",L"BTN WND",MB_ICONINFORMATION);
return true;
}
请告诉我获取tar文件中html文件内容的方法是否正确?为什么当我给缓冲区提供大索引以访问位于 tar 文件中间的缓冲区内容时,它会导致堆栈溢出?即使我声明的大小小于 tar 文件的大小,如果我手动查看?