Tester fichier UNIX ou Windows...

Clonk Messages postés 278 Date d'inscription mardi 22 janvier 2002 Statut Membre Dernière intervention 29 août 2006 - 28 juin 2004 à 16:42
cs_aardman Messages postés 1905 Date d'inscription mercredi 22 janvier 2003 Statut Membre Dernière intervention 17 septembre 2012 - 28 juin 2004 à 17:20
Bonjour,
Voilà mon problème, je dois gérer des fichiers textes, mais ils peuvent être indifféremment au format UNIX ou Windows... comme tout est géré ligne par ligne, je voudrais vérifier s'ils sont sous Windows ou UNIX.
J'avais fais cette fonction pour tester :

int testUNIX(char * fname)
{
FILE *F;
int taille;
char * ligne = new char[256];
unsigned posDst = 0;if (NULL (F fopen(fname, "r"))) return -1;
fseek(F, 0, SEEK_END);
taille = ftell(F);
rewind(F);
if (NULL == (fgets(ligne, taille, F))) return -1;
fclose(F);
for (posDst = 0; posDst < taille; posDst++)
{
cout<<ligne[posDst];
if (ligne[posDst] == '\n')
{
if (ligne[posDst - 1] == '\r')
return 1;
else
return 0;
}
}
return -1;
}

Je récup la taille et je fais un fgets sur la taille au acs ou la personne prenne un fichier avec une ligne enorme (ça arrive...)

Mais bon, là ça marche pas, ça me renvoie toujours 0.
J'ai toujorus pas trouvé de solution sur le net, si quelqu'un en a une....

Merci!

1 réponse

cs_aardman Messages postés 1905 Date d'inscription mercredi 22 janvier 2003 Statut Membre Dernière intervention 17 septembre 2012 4
28 juin 2004 à 17:20
Salut,
Si tu ouvres ton fichier en mode texte, fopen suprime tout les '\r' devant les '\n', du coup ta func retourne 0.
Pour que fopen ouvre le fichier et ne touche a rien dedant il faut l'ouvrir en mode binaire:
fopen(fname, "rb")
0