Clonk
Messages postés278Date d'inscriptionmardi 22 janvier 2002StatutMembreDernière intervention29 août 2006
-
28 juin 2004 à 16:42
cs_aardman
Messages postés1905Date d'inscriptionmercredi 22 janvier 2003StatutMembreDernière intervention17 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....
cs_aardman
Messages postés1905Date d'inscriptionmercredi 22 janvier 2003StatutMembreDernière intervention17 septembre 20123 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")