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

C++ read file


Achillf

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

Δημοσ.

Καλησπερα παιδια... εχω γραψει εναν κωδικα για 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;
}

Δημοσ.

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");

Δημοσ.

Ή αυτό που λέει ο virxen75 ή με διπλασιασμό των backslashes:

>"C:\\Users\\Achill\\Desktop'\\arxeio.txt"

 

 

Τώρα, για τον αυτόματο εντοπισμό του username που ρωτάς, ένας τρόπος είναι να το παίρνεις από τη μεταβλητή περιβάλλοντος %USERNAME% των Windows:

>http://www.cplusplus.com/reference/clibrary/cstdlib/getenv/

Δημοσ.

οριστε εβαλα και τον κωδικα που ζητηθηκε!

 

---------- Το μήνυμα προστέθηκε στις 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();
 }
}

Δημοσ.

Ακομα ενα προβλημα εχει προκυψει... Τον παραπανω κωδικα (το .exe) οταν το μεταφερω σε ενα αλλο pc τον ανιχνευει ως virus..Καμια λυση πανω σε αυτο ?

Δημοσ.

Εκανα μια παραλλαγη στον κώδικα ( εβγαλα το 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();
 }

Δημοσ.

Στην προηγούμενη έκδοση με το 1234 μπορεί κάποια antivirus να μπερδευτούν γιατί είναι ένας αρχαίος ιός με αυτό το string, αλλά στην καινούργια έκδοση δύσκολο.

 

Το βλέπει σαν ιό ή σαν trojan;

Γιατί ανοίγεις αρχείο εισόδου μέσα απο το φάκελο των windows;

Δημοσ.

το βλεπει σαν trojan και πειραζω αρχειο απο windows γιατι αυτο ειναι η αρχη απο ενα project που θελω να κανω... τι να σου πω ειμαι αρχαριος στην C++ και αν μου πεις να το κανω με αλλο τροπο θα σου πω την getline( ) η κατι παλι απο την βιβλιοθηκη string ..

 

Επισεις δεν ανοιγω το αρχειο μονο ως εισοδο αλλα μετα το κλεινω και το ανοιγω και ως εξοδο ... Απλα ξερεις κατι , δεν ειμαι καλο ρε σι και τα κανω λιγο τσαπατουλικα .

Δημοσ.
Ακομα ενα προβλημα εχει προκυψει... Τον παραπανω κωδικα (το .exe) οταν το μεταφερω σε ενα αλλο pc τον ανιχνευει ως virus..Καμια λυση πανω σε αυτο ?

 

μπορεί το δικό σου pc να έχει trojan;) ή το στικάκι που χρησιμοποιείς.

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

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

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