Speichern eines Arrays in einer Datei in C ++

Bob

Ich habe eine benutzerdefinierte Klasse namens Array. Es speichert das Array vom Typ T und eine Ganzzahl.

Schaut dies richtig aus, wenn ein Array in einer Datei gespeichert wird?

fout.write((char *)m_array, sizeof(T) * m_size);

Wie ich es speichere:

    bool save(const std::string &filename)
    {
        std::ofstream fout;

        // Open the file.
        fout.open(filename, std::ios::out | std::ios::binary);

        // Validate that the file is open.
        if (!fout.is_open())
            return false;

        // Write the size to file.
        fout << m_size << std::endl;  

        fout.write((char *)m_array, sizeof(T) * m_size);

        fout.close();

        return true;
    }

Ladefunktion:

    bool load(const std::string &filename)
    {
        std::ifstream fin;
        int size = 0;

        // Open the file.
        fin.open(filename, std::ios::in | std::ios::binary);

        // Validate that the file is open.
        if (!fin.is_open())
            return false;

        // Read the size from file.
        fin >> size;

        // Resize if needed
        if (size != m_size)
            resize(size); 

        fin.read((char *)m_array, sizeof(T) * m_size);

        fin.close();

        return true;
    }

Die Hauptdatei:

Array<int> a(10);

a.clear(); // set all values to 0. 

a[5] = 3; 

if (a.save("test.dat"))
    con.writeLine("Saved");

Dies ergibt die Ausgabewerte 0,0,0,0,0,0,3,0,0,0.

Verwenden Sie beim Abrufen Folgendes:

fin.read((char *)m_array, sizeof(T) * m_size);

Ich bekomme 10,0,0,0,0,768,0,0,0,0.

Was mache ich falsch? Der zweite Parameter sagt, er möchte die Anzahl, die für mich sizeof (T) * m_size wäre.

Update: Die Alternative ist dies beim Speichern:

for (int i = 0; i < m_size; i++)
fout << m_array[i] << std::endl;

Aber ich bevorzuge die erste Methode.

Jonathan Mee

Sie mischen formatierte und unformatierte Schreibvorgänge in den Stream. Eher, als:

fout << m_size << std::endl;

Sie müssen tun:

fout.write(reinterpret_cast<char*>(&m_size), sizeof(m_size));

BEARBEITEN:
Nachdem Sie gesehen haben, dass Sie aktualisiert sind, müssen Sie lesen, nicht mit diesem:

fin >> size;

Aber damit:

fin.read(reinterpret_cast<char*>(&m_size), sizeof(m_size));

Daher sollte hier erwähnt werden, dass Sie das Rad neu erfinden. Solange Sie damit einverstanden sind ... Trotzdem halte ich es hier für angebracht, die Verwendung vorzuschlagen vector<T>. Dies würde Ihren Code lesbarer, weniger fehleranfällig und möglicherweise schneller machen.

Vorausgesetzt, vector<int> aSie können schreiben, um so zu ofstream foutmögen:

const auto a_size = size(a);

fout.write(reinterpret_cast<const char*>(&a_size), sizeof(a_size));
fout.write(reinterpret_cast<const char*>(data(a)), sizeof(decltype(a)::value_type) * a_size);

Gegeben ifstream fin, Sie können so lesen:

size_t a_size;

fin.read(reinterpret_cast<char*>(&a_size), sizeof(a_size));
a.resize(a_size);
fin.read(reinterpret_cast<char*>(data(a)), sizeof(decltype(a)::value_type) * a_size);

Live Example

Dieser Artikel stammt aus dem Internet. Bitte geben Sie beim Nachdruck die Quelle an.

Bei Verstößen wenden Sie sich bitte [email protected] Löschen.

bearbeiten am
0

Lass mich ein paar Worte sagen

0Kommentare
LoginNach der Teilnahme an der Überprüfung

Verwandte Artikel

Dynamisches Zuweisen eines Arrays von Ganzzahlen, Speichern in einer Datei und Ermitteln des Durchschnitts in c

Speichern des Inhalts eines zweidimensionalen c # -Arrays in einer CSV-Datei

Speichern eines Arrays in einer Javascript-Datei und Verwenden in einer anderen Datei

Das zeilenweise Speichern eines großen Arrays in einer Datei führt zu einer beschädigten Datei

Speichern eines Arrays in einer Datenbank

Problem beim Speichern eines Ausgabe-C-Programms in einer Datei

Speichern eines Arrays oder eines DataFrames in einer Datei zusammen mit anderen Informationen

Das Speichern / Abrufen eines bestimmten Arrays aus einer Datei enthält Arrays

Speichern eines Numpy-Arrays in einer C-Struktur

Speichern eines numpy-Arrays in einer Datei mit einer bestimmten Genauigkeit

Speichern von Werten eines Arrays auf einer separaten Datei, die als Array Änderungen Werte

Wählen Sie den Modus zum Speichern eines Dask-Arrays in einer HDF5-Datei

Speichern eines Blobs in einer Datei in Python

Speichern eines Frames in einer Datei mit OpenCV

Speichern eines Xamarin-Image in einer Datei

Erstellen eines Arrays von Strukturen aus einer Datei in C

Lesen eines Arrays von Floats aus einer Datei in C

Speichern des FileSystemInfo-Arrays in einer Datei

PHP / Laravel - Speichern eines Arrays in einer Datenbank

Speichern eines Arrays von Pixelwerten in einer Textdatei

Speichern eines Arrays [String] in einer Ausgabedatei

Speichern eines Arrays eines Arrays einer benutzerdefinierten Klasse - Swift

Speichern Sie jede Zeile eines Numpy-Arrays in einer separaten Zeile einer Datei, anstatt sie zu trennen

Speichern einer Speicheradresse eines 2d-Arrays in einem Zeigerelement einer Struktur in C.

c ++ - Speichern Sie den Inhalt eines "std :: vector <unsigned char>" in einer Datei

Der beste Weg, um eine CSV-Datei eines zweidimensionalen Arrays oder einer Liste in Python zu speichern?

Speichern eines 2D-Numpy-Arrays von Zeichenfolgen mit einem einzelnen Array unterschiedlicher Größe in einer CSV-Datei

Objekte eines Arrays in einer CSV-Datei speichern und mit bestimmten Argumenten für die GUI lesen

Lebensdauer eines Arrays in einer Header-Datei

TOP Liste

  1. 1

    So legen Sie mit dem Interface Builder unterschiedliche führende Speicherplätze für unterschiedliche Geräte fest

  2. 2

    Fügen Sie eine weitere Schaltfläche zu gwt Suggest Box hinzu

  3. 3

    Wie konvertiere ich einen Vektor von Bytes (u8) in eine Zeichenfolge?

  4. 4

    Wie kann ich in SCSS mehrere Klassen zu einer einzigen kombinieren?

  5. 5

    Wie konvertiert man einen Datenrahmen im langen Format in eine Liste mit einem geeigneten Format?

  6. 6

    Speichern Sie ein MPAndroidChart-Diagramm in einem Bild, ohne es in einer Aktivität anzuzeigen

  7. 7

    Gruppieren Sie Datenrahmenspalten nach ihrem Datum (die Spaltentitel enthalten) und fassen Sie die Instanzen von Einsen und Nullen in R . zusammen

  8. 8

    Tomcat - Leiten Sie den alten Kontextstamm zum neuen Kontextstamm um

  9. 9

    Eclipse Oxygen - Projekte verschwinden

  10. 10

    Wie wählt man Unterschiede mit drei Tabellen aus?

  11. 11

    Tic Tac Toe-Spiel im React-Reset-Button funktioniert nicht

  12. 12

    So berechnen Sie die Verfügbarkeit von Anwendungen (SLA)

  13. 13

    ElasticSearch BulkShardRequest ist aufgrund von org.elasticsearch.common.util.concurrent.EsThreadPoolExecutor fehlgeschlagen

  14. 14

    Wie kann ich den Kaskadenmodus global einstellen?

  15. 15

    Python: Spalten mit demselben Namen zusammenführen, wobei der Mindestwert beibehalten wird

  16. 16

    So erhalten Sie eine gleichmäßige Höhe für alle Eingabefelder

  17. 17

    Wie erstelle ich einen neuen übergeordneten Knoten außerhalb der .ref (/ path) in der Firebase-Echtzeitdatenbank mithilfe von Cloud-Funktionen (Typescript)?

  18. 18

    Was ist schneller: SUM über NULL oder über 0?

  19. 19

    Wie kann ich eine verschachtelte Schleife mit lapply in R ersetzen?

  20. 20

    Kann ich ein Tkinter-Canvas erstellen, das mehrere Zeilen in einem Text-Widget umfasst?

  21. 21

    Ärgerliches Problem mit yaml, das ich nicht lösen kann

heißlabel

Archiv