les instructions suivantes :
std::ifstream ifs(file)
avec file = chaîne de caractères ="FUEL_PRICE_CO2.txt"
retournent ifs.fail() = false
alors que le fichier "FUEL_PRICE_CO2.txt"" n'existe pas mais le fichier
FUEL_price_CO2.txt" OUI
les instructions suivantes :
std::ifstream ifs(file)
avec file = chaîne de caractères ="FUEL_PRICE_CO2.txt"
retournent ifs.fail() = false
alors que le fichier "FUEL_PRICE_CO2.txt"" n'existe pas mais le fichier
FUEL_price_CO2.txt" OUI
Salut,
Le problème vient surtout du fait que windows est insensible à la casse (ne fait pas la différence entre les majuscules et les minuscules) pour ce qui concerne les noms de dossiers et de fichiers.
Comme, pour windows, fichier.txt, FiChIeR.txt et FICHIER.TXT représentent trois fois le même fichier, il est "normal" que toute tentative d'ouvrir le fichier en utilisant l'un de ces noms (qui passe par le système d'exploitation pour obtenir l'accès au fichier) soit destinée à réussir
Sous linux, il en irait différemment, car il est justement sensible à la casse, ce qui fait que les trois noms présentés plus haut représentent bel et bien trois fichiers différents
Toute tentative d'ouvrir l'un en espérant accéder à l'autre pourrait provoquer l'erreur
En fait, c'est inexact. Ntfs est case sensitive, et il est possible de créer deux fichiers ayant le même nom à la casse près (pas sous FAT, par contre)Le problème vient surtout du fait que windows est insensible à la casse (ne fait pas la différence entre les majuscules et les minuscules) pour ce qui concerne les noms de dossiers et de fichiers.
L'API, par contre, est par défaut case-insensitive. C'est à dire que quand tu fais un CreateFile("c:\\toto.txt"), elle vérifie :
- s'il existe "c:\\toto.txt" de manière case sensitive
- sinon, s'il existe un unique (j'ai un doute sur l'unicité, faudrait vérifier, peut-être que ça prend le premier trouvé) "c:\\toto.txt" de manière case-insensitive
- sinon, cela échoue
Pour être case-sensitive avec l'api windows. Il faut passer le flag FILE_FLAG_POSIX_SEMANTICS à CreateFile. Avec les streams C++, je ne pense pas que ça soit possible.
Ce n'est cela dit pas recommandé de créer plusieurs fichiers ayant le même nom à la casse près sous windows, car la plupart des applications ne s'attendent pas à ça.
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager