我想將std::cerr
和std::cout
的輸出重定向到文件。爲此,我使用了以下代碼示例中的rdbuf
函數。不幸的是,我收到異常嘗試將std :: cerr重定向到文件時出現訪問衝突異常
Exception thrown: read access violation.
*(__imp_std::basic_ios<char,std::char_traits<char> >::rdbuf(...)) was 0xCCCCCCCC.
每當我試着寫什麼std::cout
或std::cerr
。
這裏是產生我的問題代碼示例:
void redirect()
{
auto t = std::time(nullptr);
auto tm = *std::localtime(&t);
std::ostringstream oss;
oss << std::put_time(&tm, "%Y-%m-%d_%H-%M-%S.log");
auto cerrFileName = "cerr-" + oss.str();
auto coutFileName = "cout-" + oss.str();
std::ofstream cerrFile(cerrFileName, std::ios::ate); // file is created
std::cerr.rdbuf(cerrFile.rdbuf());
std::ofstream coutFile(coutFileName, std::ios::ate); // file is created
std::cout.rdbuf(coutFile.rdbuf());
}
int main()
{
redirect();
std::cout << "Test"; // The exception is thrown here.
return 0;
}
此示例創建兩個文件,因爲它應該,但不寫任何東西到他們既不。我究竟做錯了什麼?
考慮您將輸出重定向到的對象的生命週期。 – molbdnilo