2010-03-22 7 views
3

je le code suivant:lecture d'un flux en C++

ifstream initFile; 
    initFile.open("D:\\InitTLM.csv"); 
    if(initFile.is_open()) 
    { 

     // Process file 

    } 

Le fichier ne s'ouvre pas. Le fichier existe sur le lecteur D:. Est-il possible de savoir exactement pourquoi ce fichier ne peut pas être trouvé? Comme un "errno"?

+1

Pouvez-vous d'abord placer InitTLM.csv dans le répertoire du programme et faire 'initfile.open (" inittlm.csv ");' plutôt que de faire référence à une lettre de lecteur. Alors laissez-nous savoir si l'erreur persiste encore. – JonH

+1

N'utilisez pas '\' comme séparateur car cela ajoute un autre niveau d'obscurité au code car c'est le caractère d'échappement. Vouliez-vous dire '\\' ou voulez-vous dire '\\\\' Windows a accepté le '/' en tant que répertoire seporator depuis Windows XL. En l'utilisant, vous supprimez une couche de questions auxquelles nous n'avons pas besoin de répondre. –

Répondre

1

Vous devriez pouvoir utiliser le mécanisme de rapport d'erreurs sous-jacent de votre système d'exploitation pour obtenir la raison (parce que la bibliothèque standard est construite sur les primitives du système d'exploitation). Le code ne sera pas portable, mais il devrait vous aider à comprendre le fond de votre problème.

Étant donné que vous semblez utiliser Windows, vous devez utiliser GetLastError pour obtenir le code brut et FormatMessage pour le convertir en une description textuelle.

0

La STL est vraiment pas génial les erreurs. Voici le meilleur que vous pouvez faire dans la norme:

 ifstream initFile; 
    initFile.exceptions(ifstream::eofbit|ifstream::failbit|ifstream::badbit); 
    try 
    { 
     initFile.open("D:\\InitTLM.csv"); 
     // Process File 
    } 
    catch(ifstream::failure e) 
    { 
     cout << "Exception opening file:" << e.what() << endl; 
    } 

Dans mon expérience, le message retourné par ce que() est généralement inutile.

0

Vérifiez les autorisations à la racine du lecteur D :. Vous pouvez constater que votre exécutable compilé, ou le service sous lequel votre débogueur s'exécute, n'a pas les privilèges d'accès suffisants pour ouvrir ce fichier. Essayez de changer temporairement les permissions sur le répertoire D: \ root pour "Tout le monde -> Contrôle total", et voyez si cela résout le problème.