Supprimer grâce au C++

ptirob91 Messages postés 34 Date d'inscription   Statut Membre Dernière intervention   -  
ptirob91 Messages postés 34 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,
Je souhaiterai créé un programme en C++ qui effacerai n'importe quel fichier ou dossier car tout le temps faire supprimer puis aller dans la corbeil m'ennuis fortement (c'est vous dire si je le fais souvent)
Mon programme actuel est :

#include<stdio.h>
#include<stdlib.h>
#include<direct.h>

int main ()
{
printf("Le fichier ou dossier est effacer.\n\n");
{ _rmdir("dossier_test");
}
system("PAUSE");
return 0;
}

voilà, mais cela ne fonctionne pas, quelqu'un pourrait m'aider?
j'aimerai ausqsi (en option si vraiment c'est possible) qu'il m'affiche une mini fenetre type msDos pour que je tape le nom du fichier/dossier.

Merci de vos réponses
ptirob91
A voir également:

12 réponses

ptirob91 Messages postés 34 Date d'inscription   Statut Membre Dernière intervention   1
 
pour la fenetre, c'est vraiment en option...
0
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
Salut,
Quand tu effaces un fichier, en appuyant sur shift + suppr, il ne passera pas par la corbeille.
Sinon le programme que tu veux faire existe déjà sur windows. Il s'agit de la commande del.
Tu ouvres une fenêtre (cmd), et tu écris : rm fichierASuppr
Sinon, si tu souhaites quand même faire un programme, utilise la fonction remove()
remove(chemin) pour supprimer un fichier et rmdir(chemin) pour supprimer un répertoire (il doit être vide).
Pour la fenêtre, c'est simple, c'est automatique. Il te suffit juste de demander à l'utilisateur d'entrer une chaîne de caractères (fgets) et voilou.

Cdlt
0
ptirob91 Messages postés 34 Date d'inscription   Statut Membre Dernière intervention   1
 
Marcii
mais si je souaite supprimer un dossier plein? il faut que je mette le nom de tout les fichiers en remove() puis ensuite le nom du dossier en _rmdir()?
du genre (vite fait):
{
{remove (fichier_test);
};_rmdir(dossier_test);
}
??
0
ptirob91 Messages postés 34 Date d'inscription   Statut Membre Dernière intervention   1
 
Bonjoir !
sinon, j'ai vu dans la commande cmd, j'ai chercher le programme et du coup j'ai deux quesiton supplémentaire:
Comment ouvrir un programme de façon a lire son code?
Quel est le petit nom du programme qui correspond a "erase" ou "rd" sur la commande cmd?
Merci a bientôt !
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
Salut,
La fonction n'est pas _rmdir mais rmdir.
Il faut que le dossier soit vide, chose que tu peux faire par une récursivité sur l'ensemble des fichiers à l'intérieur du dossier que tu supprimeras.
Sinon, tu peux utiliser la fonction API SHFileOperation. Mais, elle n'est pas plus facile d'utilisation que la méthode précédente.

La fonction system, aussi facilement qu'elle peut résoudre ton problème, est à bannir en C ;-))).

Cdlt
0
Bilow
 
Bonjour,

Pour un fichier (exemple) :

char fichier [60];
cin >> fichier;
remove(fichier);
return 0;
// En incluant tout le reste tel que librairies etc.

Pour un dossier :

char dossier [60];
char toRemove [70];
cin >> dossier;
sprintf(toRemove, "rd %s", dossier);
system(toRemove);
return 0;

//Ou qq chose dans le genre...
0
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
Attention, la fonction system est à bannir du C/C++ ;-))).
Il vaut mieux utiliser les fonctions standards, et si besoin les fonctions spécifiques au système, voire API.
Voici un lien : https://cpp.developpez.com/faq/vc#DeleteNoEmptyDirectory

Cdlt
0
Bilow
 
Petite précision : cela ne fonctionne pas avec des espaces.

Pour y remédier, utilise des string en les demandant avec :

string tonStr;
getline(cin, tonStr);

il existe une fonction qui convertit les string en char.

Bonne continuation.
0
Bilow
 
Bonjour fiddy,

tu serais gentil de me dire comment remplacer ces commandes-ci en C++ que j'utilise tous les jours :

system("pause"); // Attend la pression d'une touche pour continuer
system("title Mon titre"); // Le titre de la fenêtre devient : "Mon titre"
system("cls"); // Efface l'écran
system("rd qq_chose"); // Supprime un dossier (sujet de cette conversation)

Voila.. Merci d'avance :)
0
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
system("pause"); // Attend la pression d'une touche pour continuer
getch(); qui se trouve dans conio.h

system("title Mon titre"); // Le titre de la fenêtre devient : "Mon titre"
SetConsoleTitle() de windows.h : https://docs.microsoft.com/en-us/windows/console/setconsoletitle?redirectedfrom=MSDN

system("cls"); // Efface l'écran
un petit lien : https://c.developpez.com/faq/?page=Gestion-du-clavier-et-de-l-ecran-en-mode-console#CONS_clear_screen

system("rd qq_chose"); // Supprime un dossier (sujet de cette conversation)
Si le dossier n'est pas vide : https://cpp.developpez.com/faq/vc#DeleteNoEmptyDirectory
Quand le dossier est vide, on peut utiliser la fonction standard : rmdir()

Cdlt,
0
Bilow
 
Merci beaucoup fiddy :)
0
Stephane
 
La méthode officielle est avec les apis win32 : demander sur le groupe Pro des apis Win32 https://www.ovh.co.uk/mail/
(code Mirosoft...)
0
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
La méthode officielle est avec les api Win32.
Mais on croit rêver. Faut arrêter de penser que Windows est derrière le C/C++.
Une méthode officielle en C/C++ est une méthode standard, qui est portable. Loin d'être le cas avec les api Win32.
Par contre, il est vrai qu'elles rendent, bien service comme : https://docs.microsoft.com/en-us/windows/win32/api/shellapi/nf-shellapi-shfileoperationa?redirectedfrom=MSDN
Mais ce n'est certainement pas une méthode officielle, peut-être sur windows, mais guère plus...
0
Pacorabanix Messages postés 3248 Date d'inscription   Statut Membre Dernière intervention   663 > fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention  
 
c'est pas pour troller mais windows.h pour le titre de la fenêtre c'est pas très portable non plus, non ? ;)
0
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846 > Pacorabanix Messages postés 3248 Date d'inscription   Statut Membre Dernière intervention  
 
Sauf, que je n'ai jamais dit que c'était la méthode officielle ^^.
Il n'existe pas de méthode standard en C/C++ pour renommer une fenêtre puisque ces langages n'ont pas connaissance des consoles. Il faut donc utiliser les interruptions du noyau.

Mon pitit coup de gueule, c'est que cette personne-là avec sa bande n'arrêtent pas dire que les méthodes officielles sont via les API win32 et redirigent vers les newsgroup. Alors qu'en rien il s'agit de méthode officielle ^^.
0
ptirob91 Messages postés 34 Date d'inscription   Statut Membre Dernière intervention   1
 
merci les gars(et filles bien sûr) dès que j'ai du temps j'essaye tout ça !
0