Formatage clé USB [Résolu]

eltonCosmo 10 Messages postés mercredi 22 décembre 2010Date d'inscription 4 août 2011 Dernière intervention - 21 juil. 2011 à 17:57 - Dernière réponse : eltonCosmo 10 Messages postés mercredi 22 décembre 2010Date d'inscription 4 août 2011 Dernière intervention
- 25 juil. 2011 à 10:45
Bonjour,

Je suis débutant en c# et je souhaiterais que mon programme formate ma clé avant de copier des données dessus. J'arrive à gérer la copie, mais je ne trouve pas de méthode permettant de formater la clé...

Merci pour votre aide, cordialement.
Afficher la suite 

Votre réponse

11 réponses

Meilleure réponse
krimog 1863 Messages postés lundi 28 novembre 2005Date d'inscription 14 février 2015 Dernière intervention - 22 juil. 2011 à 11:33
3
Merci
Si tu utilises ma méthode (avec Process.Start()), voici une technique qui devrait marcher (je n'ai pas testé directement cette commande, car je tiens à mes données).

Tout d'abord, importe cette méthode :
[DllImport("user32.dll")]
static extern bool ShowWindow(IntPtr hWnd, int nCmdShow);


Ensuite, lance ton process, en redirigeant la sortie :
Process p = new Process();
p.StartInfo.FileName = "format";
p.StartInfo.Arguments = // ... Je te laisse mettre tes arguments
p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.UseShellExecute = false;
p.Start();


Après, tu attends qu'il te pose la question du formatage :
string s;
do
{
    Thread.Sleep(10);
    s = p.StandardOutput.ReadLine();
}
while (s != "Lancer le formatage (O/N)?");
// Vérifie que la question est bien celle-ci, au caractère près.


Enfin, tu simules l'appui sur la touche O dans cette fenêtre :
IntPtr ptr = p.MainWindowHandle;
ShowWindow(ptr, 1);
SendKeys.SendWait("O");
p.WaitForExit();


En revanche, comme tu t'en doutes, cette méthode peut aboutir à des abus. Sois prudent avec ça, car si tu l'utilises contre le gré d'une personne, tu risques gros.

Krimog : while (!(succeed = try())) ;
- Nous ne sommes pas des décodeurs ambulants. Le style SMS est prohibé. -

Merci krimog 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 99 internautes ce mois-ci

Commenter la réponse de krimog
Meilleure réponse
eltonCosmo 10 Messages postés mercredi 22 décembre 2010Date d'inscription 4 août 2011 Dernière intervention - 25 juil. 2011 à 10:45
3
Merci
Merci krimog pour ta réponse ton code fonctionne à condition de mettre p.StartInfo.UseShellExecute à true.

il existe également l'argument /y qui permet d'enlever l'étape de validation par l'utilisateur
            //Utilisation de la class ProcessStartInfo
            ProcessStartInfo startInfo = new ProcessStartInfo();
            startInfo.CreateNoWindow = false;
            startInfo.UseShellExecute = true;
            startInfo.FileName = "format";
            startInfo.WindowStyle = ProcessWindowStyle.Hidden;
            startInfo.Arguments = myIni.GetValue("CléUSB","cheminClé") + " " +"/q"  + " " + "/y";

            try
            {
                // Démarrez le processus avec les infos que nous avons spécifié.
                using (Process exeProcess = Process.Start(startInfo))
                {
                    exeProcess.WaitForExit();
                }
            }
            catch
            {
                MessageBox.Show("ERREUR");                // Log error.
            }
 

Merci eltonCosmo 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 99 internautes ce mois-ci

Commenter la réponse de eltonCosmo
NHenry 14275 Messages postés vendredi 14 mars 2003Date d'inscription 20 octobre 2018 Dernière intervention - 21 juil. 2011 à 18:46
0
Merci
Bonjour,

Une clé est considérée comme un support de stockage :
http://www.google.fr/...

Mon site
Commenter la réponse de NHenry
eltonCosmo 10 Messages postés mercredi 22 décembre 2010Date d'inscription 4 août 2011 Dernière intervention - 22 juil. 2011 à 09:21
0
Merci
merci je vais chercher un peu dans ce sens
Commenter la réponse de eltonCosmo
eltonCosmo 10 Messages postés mercredi 22 décembre 2010Date d'inscription 4 août 2011 Dernière intervention - 22 juil. 2011 à 09:54
0
Merci
dsl après recherche sur google je n'ai toujours pas trouver de solution...
Tu n'aurais pas une méthode ou un morceau de code pour m'expliquer un peu plus clairement ?
Commenter la réponse de eltonCosmo
krimog 1863 Messages postés lundi 28 novembre 2005Date d'inscription 14 février 2015 Dernière intervention - 22 juil. 2011 à 10:14
0
Merci
Salut

Le plus simple est d'utiliser la commande format (plus d'infos ici).

Pour exécuter cette commande, regarde du côté de
System.Diagnostics.Process.Start(ligneDeCommande);


Cette méthode statique te renvoie un objet de type Process, et tu peux alors utiliser la méthode WaitForExit() pour que ton programme attende que le formatage soit terminé.

Lien MSDN

Krimog : while (!(succeed = try())) ;
- Nous ne sommes pas des décodeurs ambulants. Le style SMS est prohibé. -
Commenter la réponse de krimog
eltonCosmo 10 Messages postés mercredi 22 décembre 2010Date d'inscription 4 août 2011 Dernière intervention - 22 juil. 2011 à 10:16
0
Merci
Finallement j'ai réussi à créer une méthode qui appelle l'utilitaire de formatage de disque windows. dans mon code j'ai ça :

       public enum SHFormatFlags : uint
        {
            SHFMT_ID_DEFAULT = 0xFFFF,
            SHFMT_OPT_FULL = 0x1,
            SHFMT_OPT_SYSONLY = 0x2,
            SHFMT_ERROR = 0xFFFFFFFF,
            SHFMT_CANCEL = 0xFFFFFFFE,
            SHFMT_NOFORMAT = 0xFFFFFFD,
        }

        public const uint SHFMT_ERROR = 0xFFFFFFFF;
        public const uint SHFMT_CANCEL = 0xFFFFFFFE;
        public const uint SHFMT_NOFORMAT = 0xFFFFFFD;

        [DllImport("shell32.dll")]

        static extern uint SHFormatDrive(IntPtr hwnd, uint drive, uint fmtID,
   uint options);


        /// <summary>
        /// Permit to check the result of the format call
        /// Throw Exception with a detailed message
        /// </summary>
        /// 


        public static void CheckFormatResult(uint shFormatResult)
        {
            if (shFormatResult == SHFMT_ERROR)
                throw new Exception("An error occurred during the format. This does not indicate that the drive is unformattable.");
            if (shFormatResult == SHFMT_CANCEL)
                throw new OperationCanceledException("The format was canceled.");
            if (shFormatResult == SHFMT_NOFORMAT)
                throw new IOException("The drive cannot be formatted.");

            //we can exit normally
            return;
        }
      
        public void formatUSB()
        {      
            uint result = SHFormatDrive(this.Handle,
                  4, // formatting E:
                  (uint)SHFormatFlags.SHFMT_ID_DEFAULT,
                  0); // full format of E:
            if (result == (uint)SHFormatFlags.SHFMT_ERROR)
                MessageBox.Show("Unable to format the drive");
        }
    }


Voilà mais j'aimerais que le formatage soit automatisé, cad que l'utilisateur n'est rien à faire pour formater sa clé, donc si quelqu'un a une solution...
Commenter la réponse de eltonCosmo
eltonCosmo 10 Messages postés mercredi 22 décembre 2010Date d'inscription 4 août 2011 Dernière intervention - 22 juil. 2011 à 10:27
0
Merci
@krimog :

L'utilisation de la commande format serait idéal pour mon projet mais lors de son éxecution il faut appuyer sur entrée pour valider le formatage, et je ne sait pas comment faire ça en c#..
Commenter la réponse de eltonCosmo
BunoCS 14176 Messages postés lundi 11 juillet 2005Date d'inscription 19 octobre 2018 Dernière intervention - 22 juil. 2011 à 10:57
0
Merci
Hello,
Je m'immisce dans la conversation. Du point de vue utilisateur, il vaut mieux lui laisser une étape de validation avant toute action "à risque", genre notamment le formatage. De plus, pourquoi vouloir formater à chaque fois que tu copies quelque chose?


@+
Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
Commenter la réponse de BunoCS
eltonCosmo 10 Messages postés mercredi 22 décembre 2010Date d'inscription 4 août 2011 Dernière intervention - 22 juil. 2011 à 11:06
0
Merci
Je veux formater la clé après chaque copie car il s'agit de données sensibles et je souhaite automatiser au maximum mon programme donc enlever les étapes de validations.
Commenter la réponse de eltonCosmo
NHenry 14275 Messages postés vendredi 14 mars 2003Date d'inscription 20 octobre 2018 Dernière intervention - 22 juil. 2011 à 19:24
0
Merci
Bonjour,

Au sujet de ta méthode (de manière générale) :
- Une Clé USB est la majorité du temps un lecteur Flash, un support limité en nombre d'écriture, donc ce n'est pas forcément une bonne idée
- Une autre solution est d'ouvrir les fichier et de réécrire les données, cela masque les données en limitant l'épuisement du lecteur.
- Très souvent les firmwares des clés essayent en général de réduire l'usure des supports et donc déplacent les données écrites
- Il me semble avoir lu il y a quelques temps que sur un DD, il est possible de rendre irrécupérable les données, mais sur un support Flash, c'est moins souvent le cas.

Donc si tes données sont sensibles, évites les supports Flash, mais préfère un support de type DD ou disquette.

Mon site
Commenter la réponse de NHenry

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.