2014-02-10 3 views
0
#include <fstream> 
#include <iostream> 
using namespace std; 


int main(){ 


int value=0; 

for (int i=0;i<4;i++) 
{ 
    ofstream myfile("Etc/filename"); 
    string filename ="key" + i +".txt"; 
    myfile<<value<<endl; 

} 
myfile.close(); 
} 

Как я могу сохранить файл в папке etc, в которой есть key1.txt, key2.txt, key3.txt, key4.txt? кажется, что у меня проблема с потоком myfile ...сохранить имя файла в определенной папке

Любой может просвещать, как я могу с ним поменяться? Благодаря!

+1

'строка filename' никогда не используется ... – parrowdice

+0

@parrowdice это, кажется, проблема с, ofstream MyFile (" папка/«+ имя файла); – user3292128

ответ

1

Вам нужно либо передать правильно сформированную строку в качестве аргумента в конструктор. Например,

std::ofstream myfile("key" + std::to_string(i) + ".txt"); 

или

#include <sstream> // for std::ostringstream 

std::ostringstream strm; 
strm << "key" << i << ".txt"; 
std::ofstream myfile(strm.str()); 

выше предполагает, что вы есть компилятор с поддержкой C++ 11. Если вы этого не сделаете, это небольшое изменение на втором примере будет работать:

std::ofstream myfile(strm.str().c_str()); 
           ^^^^^^^ 
+0

Это C++ 11. Но даже в C++ 11, я думаю, для этого я бы использовал 'std :: ostringstream'. Это кажется более естественным. _Or_ Я бы просто использовал один оператор: 'std :: ofstream myfile (« ключ »+ std :: to_string (i) +« .txt »);'. Но, как правило, вам понадобится дополнительное форматирование, по крайней мере, если числа станут больше; что означает 'std :: ostringstream'. (Я делал это несколько раз, но мне всегда нужно было использовать 'std :: setw' и задавать символ заполнения' '0'', чтобы убедиться, что имена файлов отсортированы правильно.) –

+0

@JamesKanze I дать согласие. Я был в процессе добавления строковой версии. Я также сокращу версию C++ 11. – juanchopanza

+0

спасибо @JamesKanze, @juanchopanza! – user3292128

Смежные вопросы