11
votes

Comment supprimer plusieurs fichiers en C à l'aide de caractères génériques?

Y a-t-il un moyen de supprimer (en utilisant Supprimer () ) plusieurs fichiers à l'aide d'un * (caractères génériques)? J'ai un ensemble de fichiers qui commencent tous avec index. Par exemple: index1.txt , index-39.txt etc. Ils commencent tous avec index mais je ne sais pas quel texte suit. Il existe également d'autres fichiers dans le même répertoire afin de supprimer tous les fichiers ne fonctionneront pas.

Je sais que vous pouvez lire le répertoire, itérer chaque nom de fichier, lire les 5 premiers caractères, comparer et s'il correspond à la suppression, mais, est-ce qu'il y a un moyen plus facile (c'est ce que je fais actuellement en passant)?

Ceci est standard C, car le code s'exécute sur Linux et Windows.


0 commentaires

3 Réponses :


7
votes

Si cela ne vous dérange pas d'être spécifique à la plate-forme, vous pouvez utiliser le système system () appel: xxx

ici est une documentation sur le système système () appel, qui fait partie de la norme C Bibliothèque (CSTDLIB).


2 commentaires

Système est une implémentation spécifique par définition. J'ajoute donc toujours un cavalier pour rechercher la documentation du vendeur correspondante (si vous pouvez le trouver). Principe des moins surprises.


Merci, mais système () est un cauchemar de sécurité.



10
votes

Comme vous le signiez, vous pouvez utiliser DIOPEN, DIRREAD, DIRCLOSE pour accéder au contenu de l'annuaire, une fonction de votre propre (ou transformer les caractères génériques en une rééglementation et utilisez une bibliothèque de regex) pour correspondre, et dissimulez-le à la suppression.

Il n'y a pas de moyen standard de faciliter cela. Il y a probablement des bibliothèques, mais ils ne seront pas plus efficaces que ce que vous faites. Généralement, une fonction de recherche de fichier prend un rappel où vous fournissez la partie correspondante et action du code. Tout ce que vous seriez en train d'économiser, c'est la boucle.


2 commentaires

Merci d'avoir répondu. J'apprécie toujours quand les gens vous disent quand quelque chose ne peut pas être fait, au lieu de vous faire bs'er.


Sur UNIX Au lieu de convertir les caractères génériques en expressions régulières, vous devez utiliser Fnmatch ( OpenGroup. Org / OnlinePubs / 000095399 / Fonctions / fnmatch.html ).



0
votes

Est-ce que tout le programme fait? Si tel est le cas, laissez la ligne de commande effectuer l'expansion générique pour vous: xxx

sous Windows, vous devez créer un lien avec "Setargv.Obj", inclus dans le répertoire Standard Standard VC.


0 commentaires