Nom de fichier valide - C - Programmation
Marsh Posté le 24-07-2006 à 00:42:25
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...
Marsh Posté le 24-07-2006 à 00:48:29
Système Win32, il me semblait l'avoir dit dans le post ^^
Sinon j'ai fait ceci :
Code :
|
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.
Marsh Posté le 24-07-2006 à 01:19:21
Voilà la fonction que j'ai codé pour ceux qui galèrent comme moi :
Code :
|
Ca marche bien jusqu'à preuve du contraire.
Marsh Posté le 24-07-2006 à 08:39:10
Inekman a écrit : Yop, |
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
Marsh Posté le 24-07-2006 à 09:23:39
Inekman a écrit : Système Win32
|
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 '.'...
Marsh Posté le 24-07-2006 à 09:59:21
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... |
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.
Marsh Posté le 24-07-2006 à 10:04:24
Inekman a écrit : Je vais rechercher de ce côté, merci. |
OK. Y'a pas déjà des boites toutes faites pour ce genre de choses ?
Marsh Posté le 24-07-2006 à 10:20:41
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
Marsh Posté le 24-07-2006 à 00:29:25
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
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 ?