скопировать содержимое вектора в файл - PullRequest
1 голос
/ 14 октября 2011

У меня есть следующий код для копирования содержимого вектора в файл

#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. версия

#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 ]

4 голосов
/ 14 октября 2011

Я подозреваю, что проблема заключается в следующем:

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

должно быть;

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

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

В отладчике вы бы пошагово просмотрели код и обнаружили, что нажимаете «exit (1)».В качестве альтернативы, вы могли бы добавить что-то вроде cout << "Can't open file!\n"; в ваш оператор if.

1 голос
/ 14 октября 2011

Попытайтесь начать с более простой, работающей версии, затем измените все по порядку: этот пример просто создаст файл в 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: \ ..."), и вы должны открыть файл только в одном месте.

0 голосов
/ 14 октября 2011

Как прокомментировал Роб, твой путь все еще не верен.Вы пропустили двоеточие после идентификатора диска.Ваш путь должен выглядеть примерно так: " 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 );

  ...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...