den folgenden Code Gegeben:Ist der Standardmodus der Ofstream-Implementierung definiert?
std::ofstream stream("somefile");
if (!stream)
{
return 1;
}
Wenn .WRITE Aufrufen (....) undSTDC++ und libC++ der Strom ist im Binärmodus (std::ios::binary
) verwendet wird.
jedoch, wenn mit MSVC(2015/2017RC1) es im Textmodus oder etwas seltsam, weil das die resultierende Datei größer zu sein scheint als das, was tatsächlich geschrieben.
Aber wenn ich explizit den Modus setzen std::ios::binary
MSVC verhält sich ähnlich wie die Implementierungen anderer Standard-Bibliotheken, die bereits erwähnt.
Beispielcode:
#include <vector>
#include <cstdio>
#include <fstream>
std::size_t fsz(const char* filename) {
std::ifstream in(filename, std::ifstream::ate | std::ifstream::binary);
return static_cast<std::size_t>(in.tellg());
}
int main() {
std::ofstream stream("filename");
if (!stream)
return 1;
std::vector<unsigned long long int> v = {0x6F1DA2C6AC0E0EA6, 0x42928C47B18C31A2, 0x95E20A7699DC156A, 0x19F9C94F27FFDBD0};
stream.write(reinterpret_cast<const char*>(v.data()),v.size() * sizeof(unsigned long long int));
stream.close();
printf("expect: %d\n", v.size() * sizeof(unsigned long long int));
printf("file size: %d\n", fsz("filename"));
return 0;
}
Ausgang für den obigen Code, wenn sie mit msvc auszuführen:
expect: 32
file size: 33
Ausgang für den obigen Code, wenn sie mit Libc laufen ++, STDC++:
expect: 32
file size: 32
Der Unterschied kann m erhalten Je größer, hängt davon ab, wie viele Daten geschrieben werden und wie die Dateninhalte aussehen.
am Ende ist meine Frage immer noch die gleiche, ist es nicht definiert oder unspezifiziertes Verhalten?
den obigen Vektor der folgenden Veränderung macht das Beispiel noch deutlicher als auf was los ist.
std::vector<unsigned long long int> v = {0x0A0A0A0A0A0A0A0A, 0x0A0A0A0A0A0A0A0A, 0x0A0A0A0A0A0A0A0A, 0x0A0A0A0A0A0A0A0A};
Bitte beschreiben Sie _exactly_, was Sie sehen. Größer um wie viel? Was enthält die Datei? Wo ist dein 'write()' Anruf? Präsentiere ein [MCVE]. –
@LightnessRacesinOrbit Ich habe ein Beispiel hinzugefügt. –