Autore Topic: [C++] controllare se un file esiste  (Letto 1837 volte)

Offline clros

  • ASM Lover
  • *****
  • Post: 457
  • Karma: +3/-1
    • Mostra profilo
[C++] controllare se un file esiste
« il: 23 Dicembre 2011, 15:39:57 »
Ciao a tutti,
 in C++, uso piccola funzione per constrollare se un file esiste (è presente) e comportarmi di conseguenza:

Codice: [Seleziona]
bool exists(char* name)
{
 ifstream myFile(name);
 return myFile;
}

Questo codice l'ho trovato da qualche parte su internet.
Uso anche una funzione di boost filesystem:

Codice: [Seleziona]
if (boost::filesystem::exists(name))
Il problema è che, apparentemente nelle stesse identiche condizioni, con file NON esistente, a volte le funzioni mi restituiscono true, come se il file esistesse!!
Non ho assolutamente capito da cosa cavolo possa dipendere e non so dove battere la testa!
Avete qualche idea o suggerimento??
« Ultima modifica: 01 Gennaio 1970, 02:00:00 da Guest »
Claudio CP La Rosa

Offline clros

  • ASM Lover
  • *****
  • Post: 457
  • Karma: +3/-1
    • Mostra profilo
Re: [C++] controllare se un file esiste
« Risposta #1 il: 23 Dicembre 2011, 17:35:57 »
Non riesco proprio a capire...
E' possibile che da qualche parte il programma non chiuda esplicitamente il file e quindi il filesystem lo consideri ancora "aperto" e quindi "esistente" (anche se non me lo mostra nella lista dei file?)
« Ultima modifica: 01 Gennaio 1970, 02:00:00 da Guest »
Claudio CP La Rosa

Offline Z80Fan

  • Administrator
  • Guru
  • *****
  • Post: 1671
  • Karma: +13/-2
    • Mostra profilo
    • http://z80fan.altervista.org
Re: [C++] controllare se un file esiste
« Risposta #2 il: 23 Dicembre 2011, 22:36:52 »
Citazione da: "clros"
E' possibile che da qualche parte il programma non chiuda esplicitamente il file e quindi il filesystem lo consideri ancora "aperto" e quindi "esistente" (anche se non me lo mostra nella lista dei file?)
A meno che tu non usi un oggetto file globale, è improbabile, dato che un file viene automaticamente chiuso quando termina l'esistenza dell'oggetto ifstream. La chiamata a close() è infatti opzionale, anche se è una buona pratica chiudere esplicitamente un file quando si ha finito di usarlo (sopratutto se la funzione continua).

Io in un mio programma qualche tempo fa dovevo fare una cosa simile; ho risolto in questo modo:
Codice: [Seleziona]
std::ifstream input("file", std::ios::in | std::ios::binary);
if( input.is_open() ) {
...
}
else {
...
}
e mi funziona sempre.
« Ultima modifica: 01 Gennaio 1970, 02:00:00 da Guest »

Offline clros

  • ASM Lover
  • *****
  • Post: 457
  • Karma: +3/-1
    • Mostra profilo
Re: [C++] controllare se un file esiste
« Risposta #3 il: 23 Dicembre 2011, 22:54:52 »
Io non so davvero perchè il mio codice a volte funziona e l'istante dopo non funziona...eppure è codice semplice...addirittura, l'ho anche tolto da un thread (facendola diventare una normale funzione)..perchè pensavo che in qualche modo il fatto di essere in un thread influisse...
Deve essere una cretinata e non me ne accorgo...
Uff..a volte vorrei tanto non fare il "programmatore solitario"...
« Ultima modifica: 01 Gennaio 1970, 02:00:00 da Guest »
Claudio CP La Rosa

Tags: