Achillf Δημοσ. 2 Δεκεμβρίου 2009 Δημοσ. 2 Δεκεμβρίου 2009 Καλησπερα παιδια... εχω γραψει εναν κωδικα για c++ ετσι ωστε να διαβαζει ενα αρχειο και στην σινεχεια να συμπληρωνει μια λεξη ή ενα κειμενο κατω απο το υπαρχον κειμενο του αρχειου...Ολα ωραια και καλα, δημιουργω ενα .txt στον φακελο οπου τρεχω το project και στο fstream a; δινω την διευθυνση a.open("arxeio.txt"); .. Το project δουλευει αψογα. Το προβλημα μου ειναι οτι θελω το project να παραμεινει τον φακελο του και να διαβαζει ενα αρχειο στην επιφανεια εργασιας.. Αλλαζω τον κωδικα σε: a.open("C:\Users\Achill\Desktop\arxeio.txt"); (Οπου Achill το ονομα του user(φακελου)) , τρεχει το project χωρις error αλλα δεν κανει την δουλεια και παραμενει ανοιχτο.. Θελω να μου πειτε αν υπαρχει καποια λυση πανω στο θεμα αυτο και επισης αν μπορει η C++ να εντοπιζει το ονομα του user αυτοματα (δλδ το Achill σε αυτη την περιπτωση)... Ευχαριστω εκ των προτερων. Παρακατω ακολουθει ο κώδικας: >#include <string> #include <fstream> #include <iostream> main () { std::string arxeio="C:\Users\Achill\Desktop"; //topothesia arxeiou ifstream pernw(arxeio.c_str()); std::string keimeno; char ch; pernw.get(ch); while (!pernw.eof()) { keimeno=keimeno+ch; pernw.get(ch); } pernw.close(); ofstream dinw(arxeio.c_str()); std:string a="text"; //ti theleis na grapseis apo katw dinw<<keimeno; dinw<<endl<<a; }
virxen75 Δημοσ. 2 Δεκεμβρίου 2009 Δημοσ. 2 Δεκεμβρίου 2009 για δοκίμασε αυτό a.open("C:\Users\Achill\Desktop\arxeio.txt"); να το κάνεις a.open("C:/Users/Achill/Desktop/arxeio.txt");
yourse.gr Δημοσ. 2 Δεκεμβρίου 2009 Δημοσ. 2 Δεκεμβρίου 2009 Achillf , δές αυτό για το username http://bytes.com/topic/c/answers/646042-get-username-string-windows-c >if (a.is_open()) { /* ok, proceed with output */ } για να δείς αν έχει αν έχει ανοίξει το αρχείο. γενικότερο c++ i/o http://www.cplusplus.com/doc/tutorial/files/ μπορείς να γράψεις και τον κώδικα μήπως και δούμε και κάτι ακόμα που σου διαφεύγει; ---------- Το μήνυμα προστέθηκε στις 12:16 ---------- α τώρα που είδα το post του virxen75 και αυτό θα δούλευε >a.open("C:\\Users\\Achill\\Desktop\\arxeio.txt");
parsifal Δημοσ. 2 Δεκεμβρίου 2009 Δημοσ. 2 Δεκεμβρίου 2009 Ή αυτό που λέει ο virxen75 ή με διπλασιασμό των backslashes: >"C:\\Users\\Achill\\Desktop'\\arxeio.txt" Τώρα, για τον αυτόματο εντοπισμό του username που ρωτάς, ένας τρόπος είναι να το παίρνεις από τη μεταβλητή περιβάλλοντος %USERNAME% των Windows: >http://www.cplusplus.com/reference/clibrary/cstdlib/getenv/
Achillf Δημοσ. 2 Δεκεμβρίου 2009 Μέλος Δημοσ. 2 Δεκεμβρίου 2009 οριστε εβαλα και τον κωδικα που ζητηθηκε! ---------- Το μήνυμα προστέθηκε στις 12:53 ---------- Παιδια ευχαριστω.. Το προβλημα μου λυθηκε παρακατω ακολουθει ολοκληρωμενος κώδικας (ειναι λιγο προχειρος βεβαια...) : >#include <string> #include <fstream> #include <iostream> #include <windows.h> main () { using namespace std; char acUserName[100]; DWORD nUserName = sizeof(acUserName); if (GetUserName(acUserName, &nUserName)) { std::string username=acUserName ; std::string arxeio="C:\\Users\\"+username+"\\Desktop\\1234.txt"; //dieythinsi arxeiou ifstream pernw(arxeio.c_str()); std::string keimeno; char ch; pernw.get(ch); while (!pernw.eof()) { keimeno=keimeno+ch; pernw.get(ch); } pernw.close(); ofstream dinw(arxeio.c_str()); std:string a="keimenaki 'i leksi"; //ti theleis na grapseis apo katw dinw<<keimeno; dinw<<endl<<a; dinw.close(); } }
Achillf Δημοσ. 5 Δεκεμβρίου 2009 Μέλος Δημοσ. 5 Δεκεμβρίου 2009 Ακομα ενα προβλημα εχει προκυψει... Τον παραπανω κωδικα (το .exe) οταν το μεταφερω σε ενα αλλο pc τον ανιχνευει ως virus..Καμια λυση πανω σε αυτο ?
Evgenios1 Δημοσ. 5 Δεκεμβρίου 2009 Δημοσ. 5 Δεκεμβρίου 2009 Λογικα GetUserName αυτο θα ειναι το "προβλημα"
Achillf Δημοσ. 5 Δεκεμβρίου 2009 Μέλος Δημοσ. 5 Δεκεμβρίου 2009 Εκανα μια παραλλαγη στον κώδικα ( εβγαλα το getusername ) και παλι τον ανιχνευει ως ιο... Να πως ειναι τωρα ο κωδικας: >#include <string> #include <fstream> #include <iostream> #include <windows.h> main () { using namespace std; std::string arxeio="C:\\WINDOWS\\file.txt"; //dieythinsi arxeiou ifstream pernw(arxeio.c_str()); std::string keimeno; char ch; pernw.get(ch); while (!pernw.eof()) { keimeno=keimeno+ch; pernw.get(ch); } pernw.close(); ofstream dinw(arxeio.c_str()); std:string a="minima"; //ti theleis na grapseis apo katw dinw<<keimeno; dinw<<endl<<a; dinw.close(); }
bxenos Δημοσ. 5 Δεκεμβρίου 2009 Δημοσ. 5 Δεκεμβρίου 2009 Στην προηγούμενη έκδοση με το 1234 μπορεί κάποια antivirus να μπερδευτούν γιατί είναι ένας αρχαίος ιός με αυτό το string, αλλά στην καινούργια έκδοση δύσκολο. Το βλέπει σαν ιό ή σαν trojan; Γιατί ανοίγεις αρχείο εισόδου μέσα απο το φάκελο των windows;
Achillf Δημοσ. 5 Δεκεμβρίου 2009 Μέλος Δημοσ. 5 Δεκεμβρίου 2009 το βλεπει σαν trojan και πειραζω αρχειο απο windows γιατι αυτο ειναι η αρχη απο ενα project που θελω να κανω... τι να σου πω ειμαι αρχαριος στην C++ και αν μου πεις να το κανω με αλλο τροπο θα σου πω την getline( ) η κατι παλι απο την βιβλιοθηκη string .. Επισεις δεν ανοιγω το αρχειο μονο ως εισοδο αλλα μετα το κλεινω και το ανοιγω και ως εξοδο ... Απλα ξερεις κατι , δεν ειμαι καλο ρε σι και τα κανω λιγο τσαπατουλικα .
bxenos Δημοσ. 5 Δεκεμβρίου 2009 Δημοσ. 5 Δεκεμβρίου 2009 Ακομα ενα προβλημα εχει προκυψει... Τον παραπανω κωδικα (το .exe) οταν το μεταφερω σε ενα αλλο pc τον ανιχνευει ως virus..Καμια λυση πανω σε αυτο ? μπορεί το δικό σου pc να έχει trojan;) ή το στικάκι που χρησιμοποιείς.
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.