2011-03-27 104 views
0

全部,C++文件輸出

我不是一個編程白癡,但下面的代碼產生0字節的文件。我驗證了文件名是否正確,並創建了文件。我甚至爲了讓所有人都能讀取,寫入和執行文件,並指定文件被截斷,而不是每次都重新創建,而且仍然是0個字節的文件。

fstream fs; 
fs.clear(); 
fs.open(dataFileName.c_str(), fstream::out| fstream::trunc); 
std::cout << dataFileName.c_str() << std::endl; 

for (int idx = 0; idx < theNumberHorizontalPoints; ++idx) 
{ 
    for (int zdx = 0; zdx < theVerticalProfilePtr->getNumberVerticalLevels(); ++zdx) 
    { 
     fs << theThermalArray[idx][zdx] << " "; 
    } 
    fs << std::endl; 
    fs.flush(); 
} 
fs.close(); 
+3

你確定theNumberHorizo​​ntalPoints填寫正確嗎?嘗試使用調試器。 – 2011-03-27 14:56:26

+4

註釋'for'循環並嘗試'fs <<「示例文本」<< endl;'。看看是否有效,你知道問題是你的循環計數器 – pajton 2011-03-27 15:03:00

+1

是你的循環執行?你可以把'std :: cout << theThermalArray [idx] [zdx] <<「」;''附近'fs << theThermalArray [idx] [zdx] <<「」;'? – Vlad 2011-03-27 15:06:09

回答

0

代碼的重要部分丟失。你的數組的維度是什麼?

其餘的代碼似乎很好,所以我寫了一個小的測試應用程序,它將數字[1-6]寫入名爲demo.txt的文件

#include <iostream> 
#include <fstream> 

using namespace std; 

int main() 
{ 
    fstream fs; 
    fs.clear(); 
    fs.open("demo.txt", fstream::out | fstream::trunc); 

    int theThermalArray[][3] = { { 1, 2, 3 }, { 4, 5, 6 } }; 
    int theNumberHorizontalPoints = 2; 

    for (int idx = 0; idx < theNumberHorizontalPoints; ++idx) 
    { 
     for (int zdx = 0; zdx < 3; ++zdx) 
     { 
      fs << theThermalArray[idx][zdx] << " "; 
     } 
     fs << std::endl; 
     fs.flush(); 
    } 
    fs.close(); 
} 
+0

for循環頭文件中的最後一條語句在迭代結束時執行,而不是在開始處執行。這就是爲什麼使用'++ idx'或'idx ++'完全不相關的原因。 – Xeo 2011-03-27 15:40:49

+0

@Xeo完全正確。謝謝。 – karlphillip 2011-03-27 15:45:10

0

如果NumberHorizo​​ntalPoints爲零或更少,則會給出您描述的結果。

+0

我檢查過,theNumberHorizo​​ntalPoints = 29.我用一個調試器進入循環,看看發生了什麼。我可以將一個字符串推到流上,但是一旦我將一個double加到流上,它就不會再輸入任何內容。 – 2011-03-28 11:45:06

+0

fs << std :: endl;根據平臺增加至少一個字節到fs。只有在寫入fs失敗或NumberHorizo​​ntalPoints <= 0時才能創建零大小的文件。順便說一句,std :: endl會刷新流,所以fs.flush()是多餘的。 – Tobias 2011-03-29 11:59:10