скопировать содержимое вектора в файл

#c #stl

#c #stl

Вопрос:

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

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

void dump(vector<int>amp; 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>amp; 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::stringamp; filepath,const  vector<T>amp; 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;
}
  

Комментарии:

1. Вы его отлаживали? Это exit срабатывает?

Ответ №1:

Я подозреваю, что проблема в этом:

 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. я изменил его, но пока безуспешно? я добавил cout<<«не удается открыть файл» в операторе if в случае, если не удается открыть файл, просто показывает мне ошибку, но ошибки тоже нет, что такое problem?vector.txt создается на рабочем столе, я создал его вручную

2. «просто показывает мне ошибку, но ошибки тоже нет». Я не понимаю, что вы говорите. Когда вы запускаете свою программу, ваша программа отображает сообщение об ошибке или не отображает сообщение об ошибке?

3. Кроме того, я заметил, что вы открываете выходной файл дважды — один раз в main и один раз в dump. Попробуйте открыть его ровно один раз и посмотрите, поможет ли это.

Ответ №2:

Попробуйте начать с более простой, рабочей версии, затем меняйте вещи одну за другой: в этом примере файл будет просто создан на c:/

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

void dump( const vector<int> amp; 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: …»), и вы должны открыть файл только в одном месте.

Ответ №3:

Как прокомментировал Роб, ваш путь по-прежнему неверен. Вы пропустили двоеточие после идентификатора диска. Ваш путь должен быть примерно таким: «c: ….«

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

Попробуйте что-то вроде этого:

 template< typename T >
void writeToFile( const std::stringamp; filePath, const std::vector< T >amp; 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 );

  ...
}
  

Комментарии:

1. ostream_iterator неизвестен для программы почему?

2. если <iterator> включен, это должно быть известно, его нет в примере кода Jem, поэтому, если вы только вставили его код, вам нужно #include <iterator>, чтобы заставить его работать

3. должен ли я создать новый вопрос

4. нет, просто отредактируйте свой вопрос так, чтобы он повторно собирал текущую версию вашего кода. Но, как я уже упоминал, я думаю, вам нужно только «#include <итератор>»