Posso far aprire al programma un file il cui nome o indirizzo viene dato in input?
Ho già provato questo:
ma, ovviamente, non funziona.codice:string indirizzo; cout << "Inserisci l'indirizzo"; cin >> indirizzo; ifstream file (indirizzo);
Posso far aprire al programma un file il cui nome o indirizzo viene dato in input?
Ho già provato questo:
ma, ovviamente, non funziona.codice:string indirizzo; cout << "Inserisci l'indirizzo"; cin >> indirizzo; ifstream file (indirizzo);
Intendi indirizzo internet (URL)?
Amaro C++, il gusto pieno dell'undefined behavior.
No, indirizzo nel senso di percorso del file. Tipo: "/home/user/Documenti/Programmazione/Immagini/file.xpm"Originariamente inviato da MItaly
Intendi indirizzo internet (URL)?
In realtà quel metodo funziona se non ci sono spazi nel percorso specificato...
"Quid enim est, quod contra vim sine vi fieri possit?" - Cicerone, Ad Familiares
A me da questo errore:Originariamente inviato da Scara95
In realtà quel metodo funziona se non ci sono spazi nel percorso specificato...
codice:Programmaasd.cpp:32:33: error: no matching function for call to ‘std::basic_ifstream<char>::basic_ifstream(std::string&)’ Programmaasd.cpp:32:33: note: candidates are: /usr/include/c++/4.6/fstream:460:7: note: std::basic_ifstream<_CharT, _Traits>::basic_ifstream(const char*, std::ios_base::openmode) [with _CharT = char, _Traits = std::char_traits<char>, std::ios_base::openmode = std::_Ios_Openmode] /usr/include/c++/4.6/fstream:460:7: note: no known conversion for argument 1 from ‘std::string {aka std::basic_string<char>}’ to ‘const char*’ /usr/include/c++/4.6/fstream:446:7: note: std::basic_ifstream<_CharT, _Traits>::basic_ifstream() [with _CharT = char, _Traits = std::char_traits<char>] /usr/include/c++/4.6/fstream:446:7: note: candidate expects 0 arguments, 1 provided /usr/include/c++/4.6/fstream:420:11: note: std::basic_ifstream<char>::basic_ifstream(const std::basic_ifstream<char>&) /usr/include/c++/4.6/fstream:420:11: note: no known conversion for argument 1 from ‘std::string {aka std::basic_string<char>}’ to ‘const std::basic_ifstream<char>&’
Gli ifstream accettano std::string solo dall'ultima revisione dello standard C++ (C++11), mentre prima avevano solo costruttori a partire da stringhe stile C. Per questo motivo, quando passi la tua stringa all'ifstream, devi convertirla in stringa C usando il metodo c_str():
Tra l'altro, usare cin>>indirizzo per leggere il percorso del file non è una buona idea, dato che l'operatore >> smette di leggere al primo spazio che trova, il che significa che non puoi inserire percorsi contenenti spazi. Usa piuttosto la funzione getline, che di default legge fino alla fine della riga:codice:ifstream file (indirizzo.c_str());
codice:getline(cin, indirizzo);
Amaro C++, il gusto pieno dell'undefined behavior.
Ora funziona perfettamente, grazie!! È da poco che mi sono imbattuto nelle differenze tra gli standard C++.
Comunque sto programmando su linux e, in questo caso, è indifferente usare il cin o il getline, infatti non posso usare gli spazi negli indirizzi. Al massimo dovrei usare un carattere apposito, se non sbaglio in %s, quindi mi accontento del cin.Originariamente inviato da MItaly
Tra l'altro, usare cin>>indirizzo per leggere il percorso del file non è una buona idea, dato che l'operatore >> smette di leggere al primo spazio che trova, il che significa che non puoi inserire percorsi contenenti spazi.
Su Linux puoi usare tutti gli spazi che vuoi nei percorsi di file...![]()
Amaro C++, il gusto pieno dell'undefined behavior.
Non ha mai funzionato :POriginariamente inviato da MItaly
Su Linux puoi usare tutti gli spazi che vuoi nei percorsi di file...![]()
Al massimo se la cartella si chiama "Nuova cartella", nell'indirizzo bisognerà scrivere /home/Nuova\ cartella/. (Da terminale, non so se su c++ può funzionare, ora sto facendo un po' di prove)
Ma perchè gestire complicazioni nell'input (comunque non funzionanti) quando ti basta una semplice getline...
"Quid enim est, quod contra vim sine vi fieri possit?" - Cicerone, Ad Familiares