2010-12-10 62 views
0

我試圖將整個原始頭文件轉換爲文件,但每次我嘗試寫入內容時,我都會收到一張充滿「太」的太文件的文件。我究竟做錯了什麼?使用ISAPI過濾器將頭文件轉換爲文件

DWORD CTryISAPIFilter::OnPreprocHeaders(CHttpFilterContext* httpContext, 
    PHTTP_FILTER_PREPROC_HEADERS headerInformation) 
{ 


    char buffer[4096]; 
    DWORD bufferSize = sizeof(buffer); 

    BOOL HeaderBoolean = headerInformation->GetHeader(httpContext->m_pFC, "ALL_RAW", buffer, &bufferSize); 
    char * ptrIn = (char *) buffer; 
    std::string postData2 = ptrIn; 
    char * outputString = new char[4096]; 

    int i = 0; 
    for(i=0;i<4096;i++){ 
     outputString[i] = postData2[i]; 
    } 
    outputString[i+1] = NULL; 


    std::ofstream outfile ("D:\\WebSites\\wwwroot\\test.txt",std::ios::app); 

    outfile << outputString << std::endl; 

    outfile.close(); 
    return SF_STATUS_REQ_NEXT_NOTIFICATION; 
} 
+0

你知道'outputString [i + 1] = NULL;'會導致一點緩衝區溢出,不是嗎? – 2010-12-10 19:25:26

回答

1

headerInformation->GetHeader()返回成功嗎?

如果有,是多少實際寫入到buffer(據推測它會告訴你這是在bufferSize放置一個值)

我懷疑GetHeader()失敗,並沒有被寫入到buffer,因爲:

  • 你得到所有「ÌÌÌÌÌÌÌÌÌÌÌ」字符(這是調試版本什麼VC都會將未初始化的內存),並
  • 你沒有得到一個異常拋出,當你指數postData2過去通常應該是字符串的結尾(在大多數情況下)。所以在buffer中顯然沒有'\ 0'終止符(如果成功,將會寫入GetHeader())。

您需要檢查此故障並檢查GetLastError()以獲取有關故障的更多信息。

更新:您的緩衝區可能不夠大。有關如何適當調整緩衝區的大小,請參閱http://msdn.microsoft.com/en-us/magazine/cc163939.aspx

更新2:我已經做了一段時間,因爲我做了網頁的東西,但不是「ALL_RAW」CGI風格的服務器環境變量而不是頭?你不應該檢索這個使用GetServerVariable()而不是GetHeader()

+0

所以我認爲你是正確的,基於MS文檔數據可能不會在我試圖拉它時。儘管如此,我可以說拉URL變量。我會嘗試GetServerVariables,但我不認爲我會有很多運氣。不管怎麼說,多謝拉。 – 2010-12-10 20:08:39