2012-04-07 5 views
0

Ich versuche C++ fstream, ifstream, ofstream zu lernen. Auf halbem Weg durch mein Projekt habe ich gelernt, dass, wenn wir auf die gleiche Datei mit ofstream zugreifen und ifstream zum Lesen & schreiben, ist es besser, die Streams zu schließen, bevor Sie eine andere verwenden.Gibt es irgendwelche Bug-induzierende Funktion beim Lesen und Schreiben mit dem gleichen fstream-Objekt in C++

Wie ofstream write_stream (...); ifstream read_stream (....);

// Accessing pointers using both read_stream, write_stream interchangebly 

    read_stream.read(....); 
    write_stream.write(....); 

    read_stream.close(); 
    write_stream.close(); 

///

Im obigen Fall, ich denke, sowohl der Strom den gleichen Zeiger in der Datei verwenden, so muss ich bewusst die Zeigerbewegung sein, so dass ich jede suchen und jedes Mal wenn ich versuche zu lesen() oder zu schreiben().

Ich denke, ich habe recht, so weit.

mehr Verwirrung zu vermeiden, habe ich dieses Format entschieden

fstream read_write_stream("File.bin",ios::in|ios::out|ios::binary); 
read_write_stream.seekp(pos); 
read_write_stream.seekg(pos); 
read_write_stream.tellp(); 
read_write_stream.tellg() 

read_write_stream.read(...); 
read_write_stream.write(...); 

read_write_stream.close() 

Gibt es einen Fehler Funktion induzieren zu verwenden, dass ich in dem oben genannten Programm sollte bewusst sein ??? Bitte beachten Sie

Antwort

1

Obwohl ich nicht weiß, ob der Standard bezieht sich explizit auf diesen Fall, ich glaube nicht, dass ein C++ - Compiler kann Ihnen versprechen, was passiert, wenn Sie mehrere Streams verwenden, um die gleiche externe Ressource zu ändern (Datei in diesem Fall). Zusätzlich zur internen Implementierung von fstream hängt dies vom Betriebssystem und der Hardware ab, auf die Sie schreiben. Wenn ich richtig bin, macht dies diese Operationen standardmäßig undefiniert.

Wenn Sie zwei verschiedene Streams verwenden, wird höchstwahrscheinlich jeder seinen eigenen Put- und Get-Pointer verwalten, jeder wird gepuffert sein, was bedeutet, dass Sie, wenn Sie nicht flush() verwenden, nicht bestimmen können, was ist die Reihenfolge, in der die Operationen für die Datei ausgeführt werden.

Wenn Sie einen Stream zum Lesen und Schreiben verwenden, denke ich, das Verhalten wird vorhersehbar und trivialer zu verstehen sein.

Verwandte Themen