2016-08-25 13 views
-4

私はVisual Studio 2013で作業しています。オブジェクトのベクトルを複数のファイルに出力したいと思います。すべてを1つのファイルに出力するだけでは出力ファイルを作成できますが、複数のファイルに出力しようとすると何も起こりません。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 < <"を配置すると、実際には1つのファイルが開かれている(出力1)、複数のファイルは開かれていない(出力0)ことが示されます。

何が起こっているのか教えてください。これを修正するにはどうすればよいですか?私はプログラムを実行して、それを作った後に解析するために出力ファイルを開く必要はありません。

ありがとうございます。

+1

上記は正しく動作しますか?コンパイルされません。 ''length'、 'del'、 'p'のいずれも定義されていません。それにもかかわらず、生成される実際のファイル名を見るために 'outname'を出力しましたか?ファイルが作成されていないので、おそらく 'perror'をチェックしてください。 – WhozCraig

+0

長さはどのくらいですか? –

+0

それは動作するはずです。一つの違いがあります - この行 'out << i << endl;は最初のケースで' i'を複数回書きます。多分あなたはその出力しか見ていないでしょうか? – rustyx

答えて

0

私は複数のファイルを作成していたときに、ファイル名に "|"(図示せず)というパイプを使用しました。これはWindowsのファイル名では禁止されています。

関連する問題