fstream sind großartig, aber ich werde ein wenig tiefer gehen und Ihnen über RAII erzählen.
Das Problem mit einem klassischen Beispiel ist, dass Sie gezwungen sind, die Datei selbst zu schließen, was bedeutet, dass Sie Ihre Architektur an diese Notwendigkeit anpassen müssen. RAII verwendet den automatischen Destruktoraufruf in C++, um die Datei für Sie zu schließen.
Update: scheint, dass std :: fstream bereits RAII implementiert, so dass der folgende Code nutzlos ist. Ich werde es hier für die Nachwelt aufbewahren und als Beispiel für RAII.
int nsize = 10;
char *somedata;
ifstream myfile;
FileOpener opener(myfile, "<path to file>");
myfile.read(somedata,nsize);
// myfile is closed automatically when opener destructor is called
Lernen, wie RAII Arbeiten können Sie einige Kopfschmerzen sparen und einige große Speicherverwaltung Fehler:
class FileOpener
{
public:
FileOpener(std::fstream& file, const char* fileName): m_file(file)
{
m_file.open(fileName);
}
~FileOpeneer()
{
file.close();
}
private:
std::fstream& m_file;
};
Sie können nun diese Klasse in Ihrem Code verwenden.
// define your file name
string file_name = "data.txt";
// attach an input stream to the wanted file
ifstream input_stream(file_name);
// check stream status
if (!input_stream) cerr << "Can't open input file!";
// file contents
vector<string> text;
// one line
string line;
// extract all the text from the input file
while (getline(input_stream, line)) {
// store each line in the vector
text.push_back(line);
}
Zum Öffnen und Lesen eine binäre Datei, die Sie explizit benötigen das Leseformat in Ihrem Eingangsstrom zu erklären:
[C++: Input/Output mit Dateien] (http://www.cplusplus.com/doc/tutorial/files.html) – mreggen
Wer Interesse an RAII, sollte überprüfen [offizielles Resource Management Page] (http://www.relisoft.com/resource/resmain.html) von Bartosz Milewski. – titanae