#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 <итератор>»