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

  FORUM HardWare.fr
  Programmation
  C

  Nom de fichier valide

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Nom de fichier valide

n°1411963
Inekman
Posté le 24-07-2006 à 00:29:25  profilanswer
 

Yop,
 
Je cherche un moyen de savoir si un nom de fichier saisi dans une zone de texte est valide ou non.
 
J'ai essayé différentes méthodes, dont celle consistant à créer un "path" composé du répertoire et du nom de fichier et de faire un fopen dessus pour voir si le fichier est créé ou non. Mais me suis rendu compte que si on saisissait "..\test" en nom de fichier, ben ça passe et le fichier est créé dans le dossier parent :D  
 
Un autre truc auquel j'ai pensé, c'est filtrer directement la saisie clavier en interceptant les messages de l'api pour voir quelles sont les touches pressées. Et si la touche fait partie des caractères interdits et bien on stop l'envoi du message. Je sais faire ça sous Delphi et ça marche bien mais en C/Win32 je sèche.
 
Des idées ?

mood
Publicité
Posté le 24-07-2006 à 00:29:25  profilanswer
 

n°1411971
Emmanuel D​elahaye
C is a sharp tool
Posté le 24-07-2006 à 00:42:25  profilanswer
 

Inekman a écrit :

Je cherche un moyen de savoir si un nom de fichier saisi dans une zone de texte est valide ou non.


Ben ça dépend du système, pas du C...  
 
Une fois que les regles sont claires, il suffit de les appliquer...


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
n°1411972
Inekman
Posté le 24-07-2006 à 00:48:29  profilanswer
 

Système Win32, il me semblait l'avoir dit dans le post ^^
 
Sinon j'ai fait ceci :
 

Code :
  1. if (strspn("\"*/:<>?\\|", app.nomdest) == 0)
  2.    ok
  3. else
  4.    pas ok


J'ai regardé dans windows la liste des caractères qu'il interdit et je les ai mis dans la chaîne.
 
Qu'en penses-tu
 
[EDIT] : j'en pense que ça marche pas :( Je vais essayer de faire une succession de strchr sur chaque caractère.

Message cité 1 fois
Message édité par Inekman le 24-07-2006 à 01:00:00
n°1411978
Inekman
Posté le 24-07-2006 à 01:19:21  profilanswer
 

Voilà la fonction que j'ai codé pour ceux qui galèrent comme moi :

Code :
  1. int checkfilename(char *s)
  2. {
  3. if (strchr(s, '\"') != NULL)
  4.  return 0;
  5. else if (strchr(s, '*') != NULL)
  6.   return 0;
  7. else if (strchr(s, '/') != NULL)
  8.   return 0;
  9. else if (strchr(s, ':') != NULL)
  10.   return 0;
  11. else if (strchr(s, '<') != NULL)
  12.   return 0;
  13. else if (strchr(s, '>') != NULL)
  14.   return 0;
  15. else if (strchr(s, '?') != NULL)
  16.   return 0;
  17. else if (strchr(s, '\\') != NULL)
  18.   return 0;
  19. else if (strchr(s, '|') != NULL)
  20.   return 0;
  21. else return 1;
  22. }


 
Ca marche bien jusqu'à preuve du contraire.

n°1412001
meik
Posté le 24-07-2006 à 08:39:10  profilanswer
 

Inekman a écrit :

Yop,
 
Je cherche un moyen de savoir si un nom de fichier saisi dans une zone de texte est valide ou non.
 
J'ai essayé différentes méthodes, dont celle consistant à créer un "path" composé du répertoire et du nom de fichier et de faire un fopen dessus pour voir si le fichier est créé ou non. Mais me suis rendu compte que si on saisissait "..\test" en nom de fichier, ben ça passe et le fichier est créé dans le dossier parent :D  
 
Un autre truc auquel j'ai pensé, c'est filtrer directement la saisie clavier en interceptant les messages de l'api pour voir quelles sont les touches pressées. Et si la touche fait partie des caractères interdits et bien on stop l'envoi du message. Je sais faire ça sous Delphi et ça marche bien mais en C/Win32 je sèche.
 
Des idées ?


 
Regarde du cote des fonctions access() ou stat() (enfin ca a la base c'est plutot un syscall sous unix) ca t'evitera de te faire chier a coup de verification dans ta textbox, parce qu'au moins ca ne creera pas le fichier s'il existe pas (cela dit c'est une option de fopen ca aussi, je me souviens plus parce que j'utilise qu'open() sous unix, mais je dirais que le "+" que tu passes en parametre dit a fopen que si le fichier existe pas, il le cree.)
 
bref teste un truc genre if (stat(tonfilenamedanstatextbox, &tastructurestatjusteaudessus)) {blablapasdefichier}
 
MeiK

n°1412026
Emmanuel D​elahaye
C is a sharp tool
Posté le 24-07-2006 à 09:23:39  profilanswer
 

Inekman a écrit :

Système Win32

Code :
  1. if (strspn("\"*/:<>?\\|", app.nomdest) == 0)




strpbrk() plutôt, non ? '/' et '\\' ne sont pas des caractères interdits... Ce sont les séparateurs de chemin ! Quand à ", il sert à entourer un nom de fichier qui aurait des espaces... Le ':' est le séparateur pour les lettres...  
 
Il y a aussi un aspect séquenciel. Un '/' ou un '\\' ne peut apparaitre que si il n'y a pas eu de '.' avant
 
Idem pour "//" et "\\\" (// = séparateur de nom de machine en réseau) qui ne peut apparaitre que si il n'y a eu ni '/', ni '\\' ni '.'...


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
n°1412045
Inekman
Posté le 24-07-2006 à 09:59:21  profilanswer
 

meik a écrit :

Regarde du cote des fonctions access() ou stat()


Je vais rechercher de ce côté, merci.
 

Emmanuel Delahaye a écrit :

strpbrk() plutôt, non ? '/' et '\\' ne sont pas des caractères interdits... Ce sont les séparateurs de chemin ! Quand à ", il sert à entourer un nom de fichier qui aurait des espaces... Le ':' est le séparateur pour les lettres...  
 
Il y a aussi un aspect séquenciel. Un '/' ou un '\\' ne peut apparaitre que si il n'y a pas eu de '.' avant
 
Idem pour "//" et "\\\" (// = séparateur de nom de machine en réseau) qui ne peut apparaitre que si il n'y a eu ni '/', ni '\\' ni '.'...


En fait, il y a une zone de texte pour le répertoire et une autre pour le fichier à créer et c'est uniquement pour ce dernier que je souhaite gérer ces caractères.

n°1412048
Emmanuel D​elahaye
C is a sharp tool
Posté le 24-07-2006 à 10:04:24  profilanswer
 

Inekman a écrit :

Je vais rechercher de ce côté, merci.
 
 
En fait, il y a une zone de texte pour le répertoire et une autre pour le fichier à créer et c'est uniquement pour ce dernier que je souhaite gérer ces caractères.


OK. Y'a pas déjà des boites toutes faites pour ce genre de choses ?
 


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
n°1412066
Inekman
Posté le 24-07-2006 à 10:20:41  profilanswer
 

Pour les répertoires j'utilise la fonction "SHBrowseForFolder()" à laquelle je transmet une structure "BROWSEINFO" qui contient les informations du dossier sélectionné. En ce qui concerne le nom du fichier, y'a GetSaveFileName je crois mais il faut que je modifie mon code pour gérer ça car à mon avis cette boîte retourne tout le chemin alors que moi je traite le dossier d'une part et le fichier d'autre part et je concatène les deux par la suite (ce qui revient au même ^^) mais il faut que j'ai ces 2 informations séparément car je fais d'autres usages dans la suite du programme


Message édité par Inekman le 24-07-2006 à 10:21:02

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  Nom de fichier valide

 

Sujets relatifs
verifier qui qu' un mot existe dans un fichier txt[PHPNuke] limitation pour inclure un fichier dans un bloc ?
Probleme extention de fichierInsertion d'un fichier Excel dans un dossier Outlook
Erreur de recensement de fichier avec readdirSupprimer un espace dans un nom de fichier
[PHP] Upload et sécurité : renommer le fichier suffit ?Fond d'écran avec un fichier CSS externe
[transverse] ouvrir un fichier local / distant avec un hrefinserer contenu fichier dans une BD
Plus de sujets relatifs à : Nom de fichier valide


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR