tar ファイル内にあるファイルの 1 つである html ファイルを取得しようとしていますが、正しいかどうかわからない何かを考えています?? 私が間違っている場合は指摘してください。私の考えは-
tarファイルからストリームを作成し、そのストリームをバッファに保存してコンテンツを取得し、strstrコマンドを使用してtarファイル内のhtmlファイルを検索します(私のtarファイルでは、htmlコンテンツが「<!doctypeから始まることがわかっているため) html" と </"/html>"で終わるので、実際には html ファイルであるそれらの間のコンテンツをロードします。私のアプローチは正しいですか??
問題は、バッファーに非常に大きなサイズを指定すると (ただし、html + 他の多くのファイルを含む tar ファイルのサイズよりも小さい)、デバッグ時にスタック オーバー フローが発生することです。しかし、小さなインデックスを指定すると、メモ帳でtarファイルを開くと、開始時にある他のファイルの内容が表示されます(メモ帳でtarファイルを開いて確認しましたが、これらの内容はtarファイルに実際に存在しますが、開始時にファイルの途中にあるhtmlファイルにアクセスするためにバッファのインデックスを増やしたとき(実際には非常に大きなインデックスが必要です)、デバッグ時にスタックオーバーフローが発生します)。私のコードは-
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 ファイルの途中にあるバッファの内容にアクセスするためにバッファに大きなインデックスを指定すると、スタック オーバーフローが発生するのはなぜですか。