2009-09-04 8 views
1

Doit être une réponse simple mais je suis à une perte, voici le code qui renvoie une erreur. J'ai essayé avec et sans le slash de départ.fichier d'ouverture de problème C++

Je ne connaîtrai pas le chemin complet, je veux qu'il soit relatif de l'exe, et c'est le chemin relatif. J'ai essayé d'échapper aux barres obliques.

Mon problème est que j'obtiens le "fichier d'ouverture d'erreur" quand le fichier est là. pourquoi échoue-t-il?

ifstream myFile("/LOGS/ex090716.txt"); 
    if (myFile.fail()) {cout << "Error opening file";} 
    else 
    { 
    cout << "File opened... \n"; 
    //string line; 
    //while(getline(myFile, line)) { 
    // cmatch results; 
    // regex rx("(p|q)(=)([^ %]*)"); 
    // regex_search(line.c_str(), results, rx); 
    // string referringWords = results[3]; 
    //} 
    myFile.close(); 
    } 

merci

+0

Quel est le chemin d'accès complet au fichier que vous essayez d'ouvrir? – fbrereto

Répondre

1

Quel est votre problème exactement ?! Si vous voulez tester si le fichier est ouvert ou non, utilisez is_open().

0

fail()

Vérifiez si l'failbit ou badbit est réglé.

La fonction renvoie la valeur true si l'erreur ou le badbit est défini. Au moins l'un de ces indicateurs est défini lorsqu'une erreur autre que l'atteinte de la fin du fichier se produit lors d'une opération d'entrée.

ifstream myFile("/LOGS/ex090716.txt"); 
    if (!myFile.fail()){cout << "Error opening file";} 
    else { 
    cout << "File opened... \n"; 
    } 
myFile.close(); 

OU

ifstream myFile("/LOGS/ex090716.txt"); 
    if (!myFile){cout << "Error opening file";} 
    else { 
    cout << "File opened... \n"; 
    } 
myFile.close(); 
0

Débarrassez-vous de la barre oblique

ifstream myFile("LOGS/ex090716.txt"); 
//... 
0

Chemin relatif: ne pas commencer par /

relative au programme dir plutôt que cd: vous ne peut pas simplement utiliser argv [0] si le programme est trouvé via PATH. Je ne suis pas sûr de ce que vous pouvez faire c'est portable. Vous pouvez vouloir résoudre les liens symboliques à plusieurs reprises.

Sur Linux, readlink() sur le fichier/proc/self/exe fonctionne.

Sous Windows, il est censé travailler:

TCHAR path[2048] = {0}; 
GetModuleFileName(NULL, path, 2048); 
const string exe_path(path); 
const string exe_dir(exe_path.substr(0, exe_path.rfind("\\") + 1); 

En général, vous devez utiliser http://www.boost.org/doc/libs/1_40_0/libs/filesystem/doc/index.htm

0

perror() peut relativement facilement vous donner une description détaillée du problème

int fd = open("/LOGS/ex090716.txt", O_RDONLY); 
if(fd == -1) { 
    perror("cannot open file"); 
    exit(1); 
} 

cependant ce n'est pas C++ 'ish.