2012-06-07 63 views
2

請原諒我的無知。我知道一個公平一點,但我仍不知何故基礎上朦朧你能考慮這個簡單的例子,告訴我最好的方式傳遞到日誌消息「 writeLogFile「?傳遞指針 - !?!對於寫入流

void writeLogFile (ofstream *logStream_ptr) 
{ 
    FILE* file; 
    errno_t err; 

    //will check this and put in an if statement later.. 
    err = fopen_s(&file, logFileName, "w+"); 


    //MAIN PROB:how can I write the data passed to this function into a file?? 

    fwrite(logStream_ptr, sizeof(char), sizeof(logStream_ptr), file); 


    fclose(file); 

} 

int _tmain(int argc, _TCHAR* argv[]) 
{ 

    logStream <<"someText"; 

    writeLogFile(&logStream); //this is not correct, but I'm not sure how to fix it 

    return 0; 
} 
+6

你混合s​​tdio函數('fopen' /'fwrite' /等)和輸入輸出流。永遠不要這樣做!另外,如果'logStream_ptr'是一個指向打開文件流的指針,爲什麼要打開另一個文件? –

+0

向我們顯示您的實際代碼。同時嘗試編輯您的問題,以便更清楚地詢問問題。你想要''writeLogFile'函數做什麼? – LihO

回答

2

相反的ofstream你需要使用一個FILE類型。

void writeLogFile (FILE* file_ptr, const char* logBuffer) 
{ 
    fwrite(logBuffer,1, sizeof(LOG_BUF_MAX_SIZE), file); 
} 

int _tmain(int argc, _TCHAR* argv[]) 
{ 
    writeLogFile(m_pLogFile, "Output"); 
    return 0; 
} 

凡別處

m_pLogFile = fopen("MyLogFile.txt", "w+"); 

或者你也可以只使用ofstreams。

void writeLogFile (const char* logBuffer) 
{ 
    m_oLogOstream << logBuffer << endl; 
} 

int _tmain(int argc, _TCHAR* argv[]) 
{ 
    writeLogFile("Output"); 
    return 0; 
} 

凡別處

m_oLogOstream("MyLogFile.txt"); 

基於以下評論你似乎想要做的是一樣的東西:

void writeLogFile (const char* output) 
{ 
    fwrite(output, 1, strlen(output), m_pFilePtr); 
} 

int _tmain(int argc, _TCHAR* argv[]) 
{ 
    stringstream ss(stringstream::in); 
    ss << "Received " << argc << " command line args\n"; 
    writeLogFile(m_pLogFile, ss.str().c_str()); 
    return 0; 
} 

需要注意的是,你真的需要更多的錯誤檢查比我在這裏,因爲你正在處理c風格的字符串和原始指針(包括字符和文件)。

+0

謝謝大家..我試圖創建一個日誌這是從我的C++和從它的包裝C代碼訪問。真正的writeToLog功能將不得不爲extern「C」,不能使用C++流(我想?),所以我想我最好的選擇是遵循@Dennis和使用緩衝區......然而,可能過於複雜。如果你有很多從C++和C標準出來的標準,你會傳遞給一個日誌功能以便將它保存到文件中? – GMR

+0

在C只需使用一個字符串流++包裝格式化'string',然後通過'c_str()'方法得到了'字符*'。你可以把它傳遞給'writeLogFile'函數。 – Dennis

+0

我不確定這是什麼,但這是不正確的C++。沒有理由使用'FILE'指針而不是流,而這段代碼做了與OP的代碼應該做的完全不同的事情。 –