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

c++ file creation (linux)


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

Δημοσ.

    Καλησπέρα παιδιά,

αυτές τις μέρες φτιάχνω ένα πρόγραμμα το οποίο κάνει αριθμητικές πράξεις

αλλά και άλλα πράγματα... Μέσα σε αυτά τα άλλα θέλω να είναι και η αποθήκευση ιστορικού...

Δηλαδή να φτιάχνει ένα txt αρχείο και να γράφει ό,τι πληκτρολόγησε ο χρήστης...

    Το πρόβλημα όμως είναι ότι δίνοντας ακόμα και τις σωστές εντολές κάτι λάθος συμβαίνει με το path...

Και αυτό γιατί από,τι καταλαβαίνω δεν μπορεί να το δημιουργήσει το αρχείο!

ο κώδικας είναι ο εξής:

ofstream logfile;
logfile.open ("$HOME/logfile.txt");
logfile << "logfile.txt";
logfile.close();

έχω δοκιμάσει πάρα πολλούς τρόπους να το συντάξω το path αλλά και πάλι δεν δουλεύει κανένας!! έχω ήδη κάνει #include <fstream>!! Μόνο για λίγα λεπτά δούλεψε κάποια στιγμή αρκετά πιο πριν αλλά δεν μπορώ να θυμηθώ υπό ποιες συνθήκες!  Επίσης να συμπληρώσω ότι βρίσκομαι σε λειτουργικό linux mint cinnamon χρησιμοποιόντας τον gcc compiler με ide το codeblocks...

 

 Ευχαριστώ πολύ!

Δημοσ.

Εισαι σε λαθος section.

Πρεπει να μεταφερθει στον προγραμματισμο.

Στειλε μηνυμα σε καποιον απο τους mods και ζητα να μεταφερθει.

Και μολις γινει η μεταφορα, ας αυτοκαταστραφει και το δικο μου post. :-)

Δημοσ.

Τί ακριβώς περιμένεις να γίνει γράφοντας "$HOME" σαν μέρος του path?

Να πάρει το /home/username/ από μονο του! Είναι λάθος?

 

 

Εισαι σε λαθος section.

Πρεπει να μεταφερθει στον προγραμματισμο.

Στειλε μηνυμα σε καποιον απο τους mods και ζητα να μεταφερθει.

Και μολις γινει η μεταφορα, ας αυτοκαταστραφει και το δικο μου post. :-)

 

 

Μάλλον κάνεις λάθος... Εμένα μου λέει insomnia.gr\ Προγραμματισμός \ Προγραμματισμός

Δημοσ.

Μάλλον κάνεις λάθος... Εμένα μου λέει insomnia.gr\ Προγραμματισμός \ Προγραμματισμός

Δεν εχει αδικο. Στο subforum για linux επρεπε να το βαλεις, εφοσον δεν εχει να κανει με την γλωσσα αλλα με το pathing του OS που ειναι linux.

 

Πχ για windows βαζεις %username%/folderName/file.ext

Δημοσ.

Να πάρει το /home/username/ από μονο του! Είναι λάθος?

 

Καλείς την ofstream::open, η οποία όπως λέει στο documentation με τη σειρά της καλεί την filebuf::open. Καμία από τις δύο δε λέει τίποτα σχετικά με το ότι μετατρέπει με "μαγικό" τρόπο το environment variable HOME στην πραγματική του τιμή, πόσο μάλλον με τη σύνταξη $HOME η οποία είναι ιδιαιτερότητα του shell που χρησιμοποιείς (το οποίο είναι παντελώς άσχετο με τη C++ όπως είναι λογικό). Δε θα έπρεπε να είναι προφανές ότι εφόσον δε λέει συγκεκριμένα πως το κάνει, πάει να πει ότι δεν το κάνει;

 

Επιπλέον, αν όντως το έκανε αυτό το πράγμα τότε θα έπρεπε να υπάρχει κάποιος άλλος τρόπος για να ανοίξεις ένα αρχείο που ονομάζεται κυριολεκτικά "$HOME" (είναι μια χαρά επιτρεπόμενο filename). Αλλά ούτε τίποτα σχετικό μ' αυτό αναφέρεται πουθενά.

 

Άρα;

Δημοσ.

Δεν εχει αδικο. Στο subforum για linux επρεπε να το βαλεις, εφοσον δεν εχει να κανει με την γλωσσα αλλα με το pathing του OS που ειναι linux.

 

Πχ για windows βαζεις %username%/folderName/file.ext

ok, κατάλαβα!! Ευχαριστώ!

 

Καλείς την ofstream::open, η οποία όπως λέει στο documentation με τη σειρά της καλεί την filebuf::open. Καμία από τις δύο δε λέει τίποτα σχετικά με το ότι μετατρέπει με "μαγικό" τρόπο το environment variable HOME στην πραγματική του τιμή, πόσο μάλλον με τη σύνταξη $HOME η οποία είναι ιδιαιτερότητα του shell που χρησιμοποιείς (το οποίο είναι παντελώς άσχετο με τη C++ όπως είναι λογικό). Δε θα έπρεπε να είναι προφανές ότι εφόσον δε λέει συγκεκριμένα πως το κάνει, πάει να πει ότι δεν το κάνει;

 

Επιπλέον, αν όντως το έκανε αυτό το πράγμα τότε θα έπρεπε να υπάρχει κάποιος άλλος τρόπος για να ανοίξεις ένα αρχείο που ονομάζεται κυριολεκτικά "$HOME" (είναι μια χαρά επιτρεπόμενο filename). Αλλά ούτε τίποτα σχετικό μ' αυτό αναφέρεται πουθενά.

 

Άρα;

Ναι, το σκεφτόμουν και εγώ αυτό, αλλά πώς να το κάνω για να δουλέψει? Να βάλω σκέτο /home/file.txt ???

Δημοσ.

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

logfile.open ("~/logfile.txt"); ???

 

(όσο για το link που σου έδωσε παραπάνω ο defacer, διάβασε την περιγραφή της getenv και κάνε μερικές δοκιμές να καταλάβεις ;) )

Δημοσ.

όχι δεν δουλεύει αυτό:

logfile.open ("~/logfile.txt");

 

Το είχα κάνει και άλλη φορά αλλά δεν δούλεψε! Κοίταξε, είδα ότι η getenv έδινε κάποια paths που είναι και τα paths που βλέπει από μόνο του το Linux αλλά πώς μπορεί να με βοηθήσει αυτό?

Δημοσ.

Φτιάχνεις ένα string από την επιστρεφόμενη τιμή της getenv() και έτσι δημιουργείς το path που θέλεις:

string logFilePath(getenv("HOME") + string("/logfile.txt"));
ofstream logfile(logFilePath);
logfile << "logfile.txt";
logfile.close();

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...