Supprimer grâce au C++

ptirob91 Messages postés 37 Statut Membre -  
ptirob91 Messages postés 37 Statut Membre -
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
Configuration: Windows Vista Internet Explorer 7.0

12 réponses

  1. ptirob91 Messages postés 37 Statut Membre 1
     
    pour la fenetre, c'est vraiment en option...
    0
  2. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847
     
    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
  3. ptirob91 Messages postés 37 Statut Membre 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
  4. ptirob91 Messages postés 37 Statut Membre 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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847
     
    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
  7. 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
    1. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847
       
      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
  8. 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
  9. 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
  10. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847
     
    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
  11. 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
    1. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847
       
      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
      1. Pacorabanix Messages postés 4122 Date d'inscription   Statut Membre Dernière intervention   663 > fiddy Messages postés 441 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
      2. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847 > Pacorabanix Messages postés 4122 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
  12. ptirob91 Messages postés 37 Statut Membre 1
     
    merci les gars(et filles bien sûr) dès que j'ai du temps j'essaye tout ça !
    0