2012-07-05 104 views
1

我的程序中有大約50個文件需要打開才能讀取,我將它們全部從1.txt重命名爲50.txt希望我可以通過一個循環來傳遞文件名, ,但我不知道如何/不認爲有可能傳遞一個整數到字符或有更好的方法來解決我的情況。通過迭代打開文件

char* filename = ""; 

for(int i =0; i < 50; i++) 
{ 
if(i == 0){filename = "0.txt";} 
if(i == 1){filename = "1.txt";} // .. 
int num = 0, theinteger = 0; 
ifstream in(filename, ios::binary); 
unsigned char c; 
while(in.read((char *)&c, 1)) 
{  
     in >> theinteger; 
     sca.chac[num]=theinteger; 
     num++; 
} 
} 

return 0; 

回答

5

有一個相對簡單的方式做它 - 在C中,使用sprintf函數,如下所示:

char filename[100]; 
sprintf(filename, "%d.txt", i); 

在C++中,使用ostringstream

ostringstream oss; 
oss << i << ".txt"; 
+0

我得到錯誤傳遞oss到char,字符串,並直接在ifstream中,我如何通過它? – 2012-07-05 10:39:46

+0

好吧,我剛剛添加.str()來得到它。 – 2012-07-05 10:50:15

3

就建立代表你有以下的一個打開的文件的名稱的字符串:

stringstream ss; 
ss << anIntVal; 
mystring = ss.str() + ".txt"; 

mystring = boost::lexical_cast<string>(anIntVal); 
mystring += ".txt" 
0

看一看的sprintf功能。它和printf函數一樣工作,但打印到char*。您必須確保char*足夠大(您需要的字符數加上NULL結束符的值)。 然後您可以遞增for循環中的文件編號並使用sprintf函數更新char* filename,然後打開文件。

你的情況:

char* filename[10]; 
int i; 
for(i = 0; i <= 50; ++i){ 
    sprintf(filename,"%i.txt",i); 
    //do stuff with the files 
} 

我覺得它有用(對於好的排序,例如使用填充文件名,這也使得該char*更容易分配空間:

char* filename = "50.txt"; //the highest number should fit 
int i; 
for(i = 0; i <= 50; ++i){ 
    sprintf(filename,"%02i.txt",i); 
    //do stuff with the files 
} 

希望這有助於你!