我有我缺少明顯的東西,但似乎無法來解決下面的一種感覺:C++的ofstream不工作如預期
請參閱下面的代碼。它所做的只是循環20次,並將循環的索引寫入文件。在每三次寫入文件之後,文件關閉,並開始一個新文件(使用檢查3次寫入的IF循環。)
它對第一個文件正常工作並按預期寫入。然後,IF開始執行在第一時間和當前文件被關閉,並啓動一個新
注:在這一點上我可以寫入新文件罰款
那麼IF結束並丟棄處理回用於循環。但現在寫入文件不起作用(沒有錯誤,沒有寫入)
因此,該文件在成功寫入I F塊創建它。然後IF塊結束。然後FOR循環結束當前傳球並開始新的傳球。現在寫作不起作用。
任何人都可以幫助,我可以找到辦法做我需要做的不同,但我只想了解爲什麼會發生這種情況?
int main()
{
unsigned int test_rowcounter = 0;
unsigned int test_filenumber = 0;
char filenamebuilder[50] = "";
sprintf(filenamebuilder, "testing_file%d",test_filenumber);
strcat(filenamebuilder,".tsv");
ofstream fsTestOutput;
fsTestOutput.open(filenamebuilder, fstream::out);
//Loop 20 times writibng the loop index value to a file
for(unsigned int f=0;f<20;f++)
{
fsTestOutput << f; //This write only works for the original file
test_rowcounter++;
//If three rows have been written to a file then start a new file
if(test_rowcounter == 3)
{
test_rowcounter = 0;
test_filenumber++; // increment the number that is added to the
// base filename to create a new file
//Close the previous file and open a new one
fsTestOutput.close();
sprintf(filenamebuilder, "testing_file%d",test_filenumber);
strcat(filenamebuilder,".tsv");
ofstream fsTestOutput;
fsTestOutput.open(filenamebuilder, fstream::out);
// This next line works, the data is written
// for all files at this point
fsTestOutput << "FILE JUST CHANGED,";
}
}
}
感謝您的幫助,確實解決了它。我沒有意識到IF語句有其自己的範圍。 – Columbo 2011-04-20 09:30:30
@Columbo不客氣。 :) – razlebe 2011-04-20 09:31:46
@Columbo:'{'和'}'內的任何東西都是它自己的範圍。你可以在沒有'if','while'或'for'的情況下擁有'{...}'結構。如果它不是它自己的範圍,那麼你會得到重新宣佈的錯誤。 :) – 2011-04-20 09:41:19