Je veux vérifier si ma chaîne est le chemin de fichier Windows valide. Je cherchais autour et il semble qu'il n'y ait aucune méthode fiable pour le faire. J'ai également vérifié la bibliothèque de système de fichiers boost, et aucune fonction évidente n'existe pour faire cette vérification, peut-être quelque chose comme is_valid_windows_nameVérifiez le nom du fichier est le nom de Windows valide
Répondre
Vous pouvez utiliser la fonction _splitpath()
et analyser la sortie (en fonction de cela, vous pouvez facilement dire si votre chemin est valide ou non). Pour plus d'informations, voir MSDN pour plus d'informations.
Notez que cette fonction est spécifique à Windows.
Je ne crois pas qu'il existe une API C++ standard pour cela.
Notez que l'API Windows autorise plus de noms de fichiers que le shell Windows (les noms de fichiers que l'utilisateur est autorisé à utiliser dans l'explorateur windws).
Vous devriez jeter un oeil à l'API shell de Windows.
Une autre possibilité est d'utiliser les essais et les erreurs, de cette façon vous êtes vraiment indépendant du système de fichiers actuel.
Le plus simple est de désavouer
\/<> | ": *
et vous devriez être bien
et '*' et com, lpt, aux, con –
mis à jour ma réponse :) – codymanix
Oui, il y a une fonction boost qui fait ce que vous voulez Jetez un oeil à boost :: filesystem :: windows_name (...)... Vous devez inclure boost/filesystem/path.hpp ainsi que le lien avec les bibliothèques correctes (spécifiques à la version et à l'architecture) libboost_system et libboost_filesystem puisque le chemin n'est pas une librairie en-tête seulement
Boost pourrait être un peu beaucoup si c'était sa seule utilisation, mais Boost fournit de nombreuses fonctionnalités C++ de nouvelle génération, ce qui en vaut la peine pour le développement C++ général. Lorsque vous utilisez déjà Boost, c'est une excellente option. – sage
Dommage même la plus récente bibliothèque de systèmes de fichiers C++ 17 ne dispose pas d'une fonction permettant de vérifier les noms de fichiers
n utiliser les codes Shell Lightweight Utility functionPathFileExists
spécifiques à Windows ou Windows APIGetFileAttributes
et vérifier le dernier code d'erreur spécifiquement pour ERROR_INVALID_NAME
.
Je pense que c'est un peu une mauvaise utilisation (parce qu'il devrait y avoir une fonction dédiée) mais sert le but.
Pas si bon si le fichier n'existe pas encore. En outre, la sécurité peut empêcher son accès jusqu'à ce qu'il soit élevé. – CodeLurker
@CodeLurker Pourquoi pas exactement?OP veut juste vérifier un nom de fichier Windows valide/chemin –
OP ne dit rien à ce sujet existant déjà. Si ce n'est pas le cas, cela n'aidera pas. En outre, il se peut que nous voulions vérifier, même si nous n'y avons pas (encore) accès. Notez la solution que j'ai finalement retenue ici: https://stackoverflow.com/questions/3038351/check-whether-a-string-is-a-valid-filename-with-qt/45282192#45282192 – CodeLurker
- 1. Vérifiez si le nom d'utilisateur est dans le groupe administrateur
- 2. Vérifiez le nom de la distribution Linux
- 3. Vérifiez le nom de l'adresse IP et du DNS
- 4. Quel est le nom du bouton du menu système Windows?
- 5. Le nom du fichier de vidage du noyau est tronqué
- 6. jboss-web.xml Le nom du chemin de contexte est différent du nom du fichier war
- 7. Non valide Nom du paramètre
- 8. Vérifier le nom de fichier valide avec regex
- 9. Vérifiez si le nom d'utilisateur existe
- 10. En utilisant mysqlimport où le nom de fichier est différent du nom de la table
- 11. extrait le nom de fichier du chemin
- 12. Comment enregistrer un fichier journal dont le nom est le nom du consignateur dans log4net?
- 13. Le nom du fournisseur d'appartenance spécifié n'est pas valide. Nom du paramètre: providerName
- 14. Java - Comment savoir si un nom de fichier est valide?
- 15. Comment extraire le nom du fichier à partir du nom du chemin du fichier?
- 16. Obtenir le nom du fichier en PHP
- 17. Point dans le nom du fichier?
- 18. Enregistrement du fichier avec le même nom
- 19. Obtenir le nom du fichier maven pom
- 20. Obtenir le nom d'utilisateur du fichier ouvert
- 21. Nom du fichier dans le tampon
- 22. Récupère le nom d'affichage du fichier web.xml
- 23. 404 avec le nom du fichier requête
- 24. Quel est le nom du délimiteur d'un fichier projet C#?
- 25. Sous Windows, quand utiliser le préfixe de nom de fichier "\\\\? \\"
- 26. Enregistrer le fichier avec le nouveau nom de fichier: ajouter au nom de fichier existant
- 27. ActiveRecord valide ... nom du champ personnalisé
- 28. Quel est le nom du motif?
- 29. Comment: Nom de fichier d'image affiché différent du nom de fichier réel sur le serveur
- 30. Comment inclure le nom du serveur dans le nom de fichier d'un journal apache?
Avez-vous besoin de vérifier si le chemin fourni est juste valide, s'il est valide et si la structure du répertoire est déjà configurée pour le chemin, ou s'il existe déjà un fichier là? –
Bonne peine. Ce n'est pas un doublon puisque l'autre est étiqueté C# et la réponse acceptée donne des API C#, alors que cela est étiqueté C++. –
Que diriez-vous essayer de créer un fichier avec ce nom sur un Windows et voir si c'est un succès? (peut-être vous pouvez changer le chemin un peu pour l'essai seulement.) – cshu