将vector的内容复制到文件中

时间:2011-10-14 14:09:14

标签: c++ stl

我有以下代码将vector的内容复制到文件

#include<iterator>
#include<algorithm>
#include<fstream>
#include<iostream>
#include<vector>
using namespace std;

void dump(vector<int>& v){
    ofstream out1("C\\Users\\datuashvili\\Desktop\\vector.txt");

    if(!out1){
        exit(1);
    }
    copy(v.begin(),v.end(),ostream_iterator<int>(out1," "));
}
int main(){

    ofstream out1("C\\Users\\datuashvili\\Desktop\\vector.txt");
    vector<int>v;
    v.push_back(100);
    v.push_back(200);
    v.push_back(300);
    v.push_back(500);
    v.push_back(1000);
    dump(v);

    return 0;
}

但是当我简单地运行这段代码时,没有写入在桌面上创建的文件,为什么?你能告诉我这段代码有什么问题吗? 编辑: 这里编辑的代码也不起作用不打开文件也不写,两个版本 1.version

#include<iterator>
#include<algorithm>
#include<fstream>
#include<ostream>
#include<iostream>
#include<vector>
using namespace std;
void dump( vector<int>& v){
    ofstream out1(("C:\\vector.txt"));

    if(!out1){
        exit(1);
    }

    copy(v.begin(),v.end(),ostream_iterator<int>(out1," "));
    out1.close();
}
int main(){

    vector<int>v;
    v.push_back(100);
    v.push_back(200);
    v.push_back(300);
    v.push_back(500);
    v.push_back(1000);
    dump(v);

    return 0;
}

2

#include<iostream>
#include<fstream>
#include<ostream>   
#include<vector>
#include<algorithm>
#include<iterator>
using namespace std;
template<typename T>
void writeTo(const std::string& filepath,const  vector<T>& data)
{

 ofstream filestream("C:\\vector.txt");
 std::copy(data.begin(),data.end(),std::ostream_iterator<T>( filestream," "));
 filestream.close();

}
int main(){

   vector<int>test;
   test.push_back(1);
   writeTo<int>("C:\\vector.txt", test);

   return 0;
}

3 个答案:

答案 0 :(得分:4)

我怀疑问题是这样的:

ofstream out1("C\\Users\\datuashvili\\Desktop\\vector.txt");

应该是;

ofstream out1("C:\\Users\\datuashvili\\Desktop\\vector.txt");
               ^^^^^

您可以通过在调试器下运行,观察程序的退出状态或向程序添加print语句来自行找到它。

在调试器中,您可以逐步执行代码并发现您点击“exit(1)”。或者,您可以在cout << "Can't open file!\n";语句中添加if之类的内容。

答案 1 :(得分:1)

尝试从一个更简单的工作版本开始,然后逐个更改:这个例子只是在c:/

中创建文件
#include <fstream>
#include <vector>
using namespace std;

void dump( const vector<int> & v)
{
    ofstream out1("C:\\vector.txt");

    if(!out1)
    {
        exit(1);
    }
    copy(v.begin(),v.end(),ostream_iterator<int>(out1," "));
}

int main()
{
    vector<int>v;
    v.push_back(100);
    v.push_back(200);
    v.push_back(300);
    v.push_back(500);
    v.push_back(1000);
    dump(v);
    return 0;
}

正如其他人提到的,你的路径是错误的(至少在“c:\ ...”中缺少“:”),你应该只在一个地方打开文件。

答案 2 :(得分:0)

像罗布一样评论你的道路仍然是错误的。您错过了磁盘标识符后的冒号。你的道路必须是这样的:“ c:\ ....

你仍然打开两次流,在第二次尝试时可能会失败,因为第一次调用会锁定此资源。

尝试这样的事情:

template< typename T >
void writeToFile( const std::string& filePath, const std::vector< T >& data )
{
  std::ofstream fileStream( filePath );
  std::copy(data.begin(), data.end(), std::ostream_iterator< T >(fileStream, " ") );

  fileStream.close();
}

int main()
{
  ...

  vector< int > test;
  test.push_back(1);

  writeToFile<int>( "c:\\test.txt", test );

  ...
}