Προς το περιεχόμενο

C++ read-write σε αρχεία


vasiliis

Προτεινόμενες αναρτήσεις

Δημοσ.

Έχεις 2 επιλογές ή μας δήχνεις τον κώδικα για αποθήκευση ή μας δίνεις το αρχείο να το δούμε. Σε κάθε περίπτωση οι πληροφορίες που δίνεις είναι ανύπαρκτες στην θέση σου δεν θα περίμενα απάντηση από μια τέτια ερώτηση.

Δημοσ.
>#include<iostream>
#include<string.h>
#include<cstring>
#include<ctype.h>
#include<stdlib.h>
#include<iomanip>
#include<fstream>
using namespace std;

class onomata
{
public:
string onoma,eponimo;

onomata();

}onomata[10];

onomata::onomata()
{
onoma="";
eponimo="";
}
int main()
{
fstream file;

file.open("onomata.txt",ios::out);
onomata[0].onoma="giorgos";
onomata[0].eponimo="dimitriou";
file.write(reinterpret_cast<char *>(&onomata[0]),sizeof(onomata));
file.close();

system("pause");
return 0;
}

Δημοσ.
>using namespace std;

class onomata
{
public:
string onoma,eponimo;

onomata();
friend fstream& operator<<(fstream& f,onomata& r)
{
 f<<r.onoma;
 f<<r.eponimo;
 return f;
}

}onomata[10];

onomata::onomata()
{
onoma="";
eponimo="";
}

int main()
{
fstream file;
file.open("onomata.txt",ios::out);
onomata[0].onoma="giorgos";
onomata[0].eponimo="dimitriou";
file<<onomata[0];

file.close();

system("pause");
return 0;
}

Δημοσ.

Thnx.Αυτόν τον τρόπο τον ήξερα.Με την write πώς γίνεται;

Έπεξα λιγο με το κώδικα σου αλλά δεν ξέρω C++ για να μπορέσω να ξεπεράσω τα προβλήματα συμβατότητας μεταξύ char * και string.

Το παράδειγμά σου δουλεύει όπως το περίμενα. Με λίγα λόγια γράφει τα δεδομένα του class onomata στον δίσκο και άμα το ανοίξεις με ένα hex editor θα δεις ότι το όνομα και το επώνυμο είναι εκεί απλά έχει ενα κάρο μηδενικούς χαρακτήρες πριν και μετά με αποτέλεσμα ανοιγοντάς το σε ένα text editor να γίνεται truncate το string στον πρώτο χαρακτήρα και να μην εμφανίζει το υπόλοιπο.

Επίσης έχω αναστολές για την χρήση της sizeof η οποία επιστρέφει το μέγεθος της μεταβλητής στην μνήμη και όχι το πραγματικό μήκος του αλφαριθμητικού θα πρότεινα την χρήση strlen όπου και είχα πρόβληματα στην μετατροπή από string σε char* ξανά και μετά από κανα μισάωρο τα παράτησα. Τα βήματα που θα έκανα εγω για την εγγραφή txt αρχείου

1) file.write(onomata[0].onoma, strlen(onomata[0].onoma));

2) file.write(onomata[0].eponima, strlen(onomata[0].eponima));

3) file.write(crlf, strlen(crlf));

 

Δεν ξέρω πως θα κάνεις την μετατροπή και δεν θέλω να αρχήσω να υποθέτω αυτή την στιγμή.

  • 2 εβδομάδες αργότερα...

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

  • Δημιουργία νέου...