Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
4563 connectés 

 


Dernière réponse
Sujet : [C++] Prise de tête avec un char
Carbon_14 Longueur maxi d'un path + nom de fichier. C'est 128 sous Win16 je crois, 67 caractères max pour un path sous DOS  
 
J'ai un collègue qui a accumulé des sous-sous-répertoires (sous Win3.11) qu'on ne peut même plus sauver because trop de caractères dans les noms et de sous-niveaux :(). C'est le défaut des jeunes qui sont habitués à Win98/2000 dès le biberon :D

Votre réponse
Nom d'utilisateur    Pour poster, vous devez être inscrit sur ce forum .... si ce n'est pas le cas, cliquez ici !
Le ton de votre message                        
                       
Votre réponse


[b][i][u][strike][spoiler][fixed][cpp][url][email][img][*]   
 
   [quote]
 

Options

 
Vous avez perdu votre mot de passe ?


Vue Rapide de la discussion
Carbon_14 Longueur maxi d'un path + nom de fichier. C'est 128 sous Win16 je crois, 67 caractères max pour un path sous DOS  
 
J'ai un collègue qui a accumulé des sous-sous-répertoires (sous Win3.11) qu'on ne peut même plus sauver because trop de caractères dans les noms et de sous-niveaux :(). C'est le défaut des jeunes qui sont habitués à Win98/2000 dès le biberon :D
antp

El_Gringo a écrit a écrit :

la longueur maxi de quoi !?  




 
longueur maxi d'un nom de fichier, répertoire compris !!
c'est pas juste pour dire que c'est une puissance de 2
tu peux mettre 257 je m'en fous.
Si tu ne mets que 200, il se peut que ça plante avec un long nom de fichier, alors qu'avec 256 ça passera. (tiens c'est une limite de la FAT/FAT32, ou une limite dans Windows ? que se passe-t-il en NTFS ?)

 

[edtdd]--Message édité par antp--[/edtdd]

Alload Ca marche avec un ZeroMemory(), tain j'aurais du penser que les variables sont jamais initialisées à zéro à part les string... Quel âne desfois.
 
Enfin, merci beaucoup!!! :)
El_gringo la longueur maxi de quoi !?
Carbon_14 Il me semble que la longueur maxi est de 256. Si on y arrive mais qu'il n'y a que 200 octets réservés, ça écrase les variables qui suivent en mémoire !!! Vaut mieux trop que pas assez.
Carbon_14 strncpy, il me semble qu'elle ne met rien à la fin !
Pour certaines fonctions, il faut ajouter le '\0' terminal à la bonne position, sinon chaîne "infinie" en mémoire (y a la zone de mémoire réservée, mais y a pas le "fin de chaîne" qui sert de "butée" ).
 
Pour transformer les chemins longs en chemins courts (avec des ~), il y a une API 32 bits qui sait le faire. On entre le nom long (avec espaces, etc..) et elle code à la mode 16 bits (certaines API n'acceptent pas les noms longs => coïncés sans elle). Faut que je retrouve son nom. Ca m'échappe pour l'instant.
El_gringo

antp a écrit a écrit :

 
 
hum dangereux ça...
normalement c'est [256]  
 
 




tu parles... on s'en tape ça ! 200, 256, c pareil !
c de la maniaquerie de développeur de vouloir absoluement mettre des puissances de 2 !

 

[edtdd]--Message édité par El_Gringo--[/edtdd]

Alload Avec [256] ça fait la même chose, mais si c'est mieux de le mettre à 256 je le met :)
El_gringo j'connais pas cette fonction, mais ça te pose un pb lors de l'execution le fait qu'il ai rempli ça !?
et si ça te gène vraiement, fait un
memset(szChaine, 0, sizeof (szChaine); // ou un ZeroMemory
antp

Alload a écrit a écrit :

Deuxième problème, j'initialise un char[200] pour être sûr qu'il y aura assez de place pour mettre tout le chemin du fichier




 
hum dangereux ça...
normalement c'est [256]

 

[edtdd]--Message édité par antp--[/edtdd]

Alload copy(buffer.begin(), buffer.end(), szPath);
El_gringo tu copies avec quelle commande ?
 
EDIT: logiquement, c pas gênant (si ce n'est que ça fait pas très propre), parce que les fonction de copie vont mettre un '\0' (caractère null) à la fin de ta chaine. toutes les fonctions qui exploitent les chaines de char utilisent ce charactère comme marque de fin de chaine

 

[edtdd]--Message édité par El_Gringo--[/edtdd]

Alload C'est du genre:
 
"C:\Mon Fichier\test.txt" ÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌ
ÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌ
ÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌ"
Alload Oki, bon déjà ça c'est cool.
 
Deuxième problème, j'initialise un char[200] pour être sûr qu'il y aura assez de place pour mettre tout le chemin du fichier, le problème c'est qu'après avoir copier la string dedans, j'ai le chemin du fichier PLUS plein de caractère aléatoire... D'où est-ce que ça peut venir?
El_gringo bah, en fait ça:
char  szChaine[ENTIER];
C exactement la même chose que ça:
char* lpszChaine = malloc (ENTIER);
puis free(lpszChaine); // qd t'en as plus besoin
 
pour accèder aux différente caractères:
szChaine[0] <=> *(lpszChaine)
szChaine[1] <=> *(lpszchaine + 1)
szChaine[i] <=> *(lpszChaine + i);
 
EDIT: mais en fait, ton pb est encore plus simple que je croyais il me semble, en fait quand tu fait
char szChaine[ENTIER];
tu voudrais un char* vers ce char[] !? hé bah szChaine est un char* (il pointe en fait vers szChaine[0]). étonnant, non ?

 

[edtdd]--Message édité par El_Gringo--[/edtdd]

Alload Comment faire pour avoir un char* pour une variable qui doit être char[] car elle doit contenir plusieurs caractères?
Alload Déjà, est-il possible de mettre plusieurs caractère dans un char?
 
Puis, voilà comment se présente une partie du fichier avec lequel je dois charger le chemin du fichier:
 
*BITMAP "Mon fichier/monfichier.txt" *MAP_TYPE
 
Pour le moment j'utilise ce code:
 
string buffer
ZeroMemory(&buffer, sizeof(buffer));
 
   while (1)
   {
    string buffer2;
    ZeroMemory(&buffer2, sizeof(buffer2));
    file >> buffer2;
    if (buffer2 == "*MAP_TYPE" ) //Car on ne lit alors plus le chemin de la texture
     break;
     
    else
     buffer += buffer2 + " ";
   }
   
   char pPath;
   copy(buffer.begin() + 1, buffer.end() - 2, &pPath); //On enlève les " "
 
Le problème c'est que je ne peux pas charger des chemins de fichiers contenant des espaces. Le deuxième problème c'est que je ne peux pas utiliser un char[] car une fonction que j'utilise demande un char.
 
Donc si vous pouviez m'aider un peu. :)

Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)