2017-10-13 8 views
-3

Si j'ouvre un fichier en C de l'une des manières suivantes, alors fopen fonctionne correctement.fopen échoue en C si la barre oblique '/' est placée avant le nom du répertoire

fopen("file.txt", "w"); 
fopen("/file.txt", "w"); 
fopen("dir/file.txt", "w"); 

Si je mets une barre oblique «/» (ou « \ » en cas de Windows) avant le nom de répertoire comme suit, puis fopen échoue (renvoie NULL).

fopen("/dir/file.txt", "w"); 

Il se produit à la fois sur Windows (MSVC) et Linux. Quelle est la raison? Devrais-je supprimer le slash '/'?

+10

Vous comprenez le concept de chemins? Surtout la différence entre un chemin * absolu * et un chemin * relatif *? –

+0

Testez les chemins que vous essayez d'utiliser avec "ls" ou "dir" dans un shell et vous verrez bientôt où votre erreur est –

+0

fichier.txt == fichier.txt dans le répertoire courant. /file.txt == fichier.txt dans le répertoire racine du système. Ils ne sont clairement pas les mêmes. – PSkocik

Répondre

0

vous devez ajouter "." Infront du "/"

ex: fopen("./dir/file.txt", "w");

si vous commencez avec "/" il va commencer à partir du répertoire racine. C'est la raison pour laquelle fopens renvoie null

+3

Ne faites pas ça. Le dossier courant peut être n'importe quoi, et c'est une erreur commune de supposer qu'il pointera vers le répertoire de l'application. –

+0

Y a-t-il des raisons d'utiliser './Dir' plutôt que simplement' dir'? –

+0

@AndrejsCainikovs Je viens de répondre comment l'utilisateur peut aller à ce fichier (dans le sous-dossier) à partir du dossier en cours. – Ran94