ファイルは、2番目のcopy
が呼び出されるまでに読み込めません。 (コメントで彼の答えのためのピョートルSkotnickiのおかげで)
flush
への呼び出しは、プログラムが動作することができます:ifstream
が作成されたときに
#include <algorithm>
#include <iostream>
#include <iterator>
#include <vector>
#include <fstream>
int main()
{
std::string path("numbersfile");
std::vector<int> myVector{1,16,32,64};
std::vector<int> newVector{};
std::ofstream FILE(path,std::ios::out | std::ofstream::binary);
std::copy(myVector.begin(),myVector.end(),std::ostreambuf_iterator<char>(FILE));
FILE.flush(); // required here
std::ifstream INFILE(path,std::ios::in | std::ifstream::binary);
std::istreambuf_iterator<char> iter(INFILE);
//std::copy(iter.begin(),iter.end(),std::back_inserter(newVector)); //this doesn't compile
std::copy(iter,std::istreambuf_iterator<char>{},std::back_inserter(newVector)); // this leaves newVector empty
return 0;
}
ofstream
は、スコープ内にまだあります。 ofstream
のデストラクタが呼び出されていれば、ファイルはifstream
のために準備されているはずです。次のプログラムではifstream
が自動的に破壊されています
#include <algorithm>
#include <fstream>
#include <iterator>
#include <vector>
std::string filename("numbersfile");
std::vector<char> myVector{1,16,32,64};
void write_vector_to_file(const std::vector<char>& myVector, std::string filename);
std::vector<char> read_vector_from_file(std::string filename);
int main()
{
write_vector_to_file(myVector, filename);
auto newVector{read_vector_from_file(filename)};
return 0;
}
void write_vector_to_file(const std::vector<char>& myVector,std::string filename)
{
std::ofstream ofs(filename,std::ios::out | std::ofstream::binary);
std::ostream_iterator<char> osi{ofs};
std::copy(myVector.begin(),myVector.end(),osi);
}
std::vector<char> read_vector_from_file(std::string filename)
{
std::vector<char> newVector{};
std::ifstream ifs(filename,std::ios::in | std::ifstream::binary);
std::istreambuf_iterator<char> iter(ifs);
std::istreambuf_iterator<char> end{};
std::copy(iter,end,std::back_inserter(newVector));
return newVector;
}
'FILE.flush();最初の'のstd :: copy'後 '右? –
はい、それは動作します! – wally