- Introduction
- A simple example
- Common interfaces
- Open & close
- Control output formats
- Tricks
- References
Introduction
Cpp’s std::ofstream is very similar to its std::ifstream.
A simple example
#include <fstream>
#include <iostream>
int main(int argc, char* argv[]) {
std::ofstream ofs("out.txt");
int a = 3;
double b = 4;
ofs << a << "\n" << b << "\n";
int d = 4;
ofs.write(reinterpret_cast<char*>(&d), sizeof(d));
char c = '\n';
ofs.write(&c, sizeof(char));
ofs.put('X');
ofs.flush();
ofs.close();
std::ifstream ifs("out.txt");
int e; double f;
ifs >> e >> f;
ifs.get(); // skip '\n'
int g;
ifs.read(reinterpret_cast<char*>(&g), sizeof(g));
std::cout << e << " " << f << " " << e << std::endl;
std::cout << std::boolalpha << ifs.eof() << std::endl;
ifs.close();
return 0;
}
Common interfaces
Open & close
similar to ifstream.
Write data
operator<<putwrite(char*, count)
Position
tellp()seekp(pos, refer)
Control output formats
Sometimes we want to control the output. Cpp has provided lots of functions and fmtflags
to help users.
number related
std::boolalphastd::hex,std::oct,std::decstd::scientificstd::fixedstd::showbasestd::showposstd::showpointsetf,unsetfflags
Length and alignment
setwitdh,widthsetprecision,precisionsetfill,fill
A complete example
#include <algorithm>
#include <fstream>
#include <iomanip>
#include <iostream>
#include <vector>
int main(int argc, char* argv[]) {
std::ofstream ofs("out.txt");
std::ios::fmtflags flags = ofs.flags();
int a = 3;
ofs << std::setw(8) << std::setfill('-') << std::left << std::showbase << std::hex << a << "\n";
ofs.width(4);
ofs.fill('+');
ofs.setf(std::ios::right|std::ios::showbase);
ofs << a << "\n";
double c = 3.4;
ofs << std::showpos << std::showpoint << c << "\n";
double e = 3.141592653;
ofs.unsetf(std::ios::showpos);
ofs << std::setprecision(3) << e << "\n";
// reset flags
ofs.flags(flags);
double d = 3.4;
ofs << d << "\n";
ofs.flush();
ofs.close();
return 0;
}
Tricks
#include <algorithm>
#include <fstream>
#include <iterator>
#include <string>
#include <vector>
int main(int argc, char* argv[]) {
std::ofstream ofs("out.txt");
std::vector<std::string> result {"Hello", "The", "World"};
std::copy(result.begin(), result.end(), std::ostream_iterator<std::string>(ofs, "\n"));
std::vector<int> result1 {1, 3, 5};
std::copy(result1.begin(), result1.end(), std::ostream_iterator<int>(ofs, "\n"));
return 0;
}