2016-08-25 4 views
-4

Я работаю с visual studio 2013. Я хочу вывести вектор объектов в несколько файлов. Я могу создать выходной файл, если я просто распечатаю все в один файл, но если я попытаюсь выполнить вывод в несколько файлов, ничего не произойдет.ofstream несовместимо создает/записывает выходной файл C++

#include<vector> 
#include<fstream> 
#include<iostream> 
#include<string> 
using namespace std; 

struct object 
{ 
    int a, b; 
}; 

int main() 
{ 
    vector<object> DATA; 

    //fill DATA 

    ofstream out; string outname; 
    outname = "TL" + ".txt"; 
    out.open(outname.c_str()); 

    for (int i = 0; i < p; i++) 
    { 
     for (int k = 0; k < DATA.size(); k++) 
     { 
      out << i << endl; 
      if (DATA[k].a == i) 
       out << DATA[k].b << endl; 
     } 
     out << endl; 
    } 
    out.close(); 
    return 0; 
} 

Вышеупомянутые работы точно так же, как я ожидаю. Однако, если я перестрою его так, чтобы я мог создавать отдельные файлы:

for (int i = 0; i < p; i++) 
    { 
     ofstream out; string outname; 
     outname = "TLR" + to_string(i) + ".txt"; 
     out.open(outname.c_str()); 
     for (int k = 0; k < DATA.size(); k++) 
     { 
      if (DATA[k].a == i) 
       out << DATA[k].b << endl; 
     } 
     out.close(); 
    } 

У меня нет выхода. Я уже проверял, были ли файлы созданы в другом каталоге и nada. Размещение «cout < < out.is_open()» после каждого из случаев показывает, что один файл фактически открывается (выход 1), в то время как несколько файлов не открываются (вывод 0).

Может ли кто-нибудь сказать мне, что происходит, и что я могу сделать, чтобы исправить это? Я не хочу запускать программу, а затем открывать выходной файл для разбора после того, как я это сделал.

спасибо.

+1

Выше работает точно так, как ожидалось? Он не компилируется. Определены никакие «длины», «дель» или «р». Независимо от того, вы также выводили 'outname', чтобы увидеть, как генерируется фактическое имя файла? И, возможно, проверьте 'perror', так как файл не был создан? – WhozCraig

+0

Что такое длина, del и p в любом случае? –

+0

Он должен работать. Существует одно отличие: эта строка 'out << i << endl;' в первом случае записывает 'i' несколько раз. Может быть, вы видите только этот выход? – rustyx

ответ

0

Когда я делал несколько файлов, я использовал канал, «|», (не показан) в имени файла - который является запрещенным символом в именах файлов Windows.

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