2017-03-01 102 views
1

我有100個文件名爲「realization_i.dat」,其中我是一個從0到99的整數。我可以循環遍歷只有整數的文件名嗎?

我想遍歷每個文件以導入用於操作的數據,以便在我的代碼中使用。

我對如何做到這一點不確定,但是這是我到目前爲止有:

for (int i = 0; i < 99; i++) { 

    string path = "/Users/Olly/Documents/BScProject/WeakLensing/SIGNAL/"; 
    string mainFile = path + "realization_" << i << ".dat"; 
    vector <double> Pos1, Pos2, E1, E2, Z, W, SC; 
    ifstream in(mainFile.c_str(), ios::in); 

我的想法是,對於i = 0,我會輸入來自realization_0數據。 dat文件,然後實現_1.dat文件等,最多可以實現_99.dat。

我收到以下錯誤:

ShearStacks.cpp:41:49: error: invalid operands to binary expression 
     ('std::__1::basic_string<char>' and 'int') 
     string mainFile = path + "realization_" << i << ".dat"; 

任何人都可以解釋爲什麼這不工作,並建議遍歷文件的新方法? (相當新的C++。)

+0

爲什麼會* * 「realization_」 <<我<< 「.DAT」 工作? – immibis

+0

我認爲它可能以同樣的方式工作,如果你做cout <<「realization_」<< 0 <<「.dat」你得到realize_0.dat。下面有一個很好的解釋,爲什麼這不起作用。 – crazycrazy

回答

1

按照operator precedence+操作將首先發生。 (path + "realization_") << i << ".dat";然後編譯器將嘗試在結果std::stringint之間尋找合適的運算符<<,該運算符不可用,則它會窒息。

你可能想使用std::to_string你的數字轉換成字符串:

for (int i = 0; i < 2; i++) { 

    string path = "/Users/Olly/Documents/BScProject/WeakLensing/SIGNAL/"; 

    string mainFile = path + "realization_" + std::to_string(i) + ".dat"; 

    vector <double> Pos1, Pos2, E1, E2, Z, W, SC; 
    ifstream in(mainFile.c_str(), ios::in); 
    ...... 
} 
0

字符串是不是甲流!

正常使用字符串連接:

string mainFile = path + "realization_" + std::to_string(i) + ".dat"; 

注意to_string只能先從C++ 11。

0

字符串'mainFile'不能用那種方式。

我建議使用一個std :: stringstream的:

std::stringstream ss; 
ss << "/Users/Olly/Documents/BScProject/WeakLensing/SIGNAL/" 
    << "realization_" << i << ".dat"; 

std::string mainFile = ss.str();