none
rechercher un fichier sur mon disque dur avec une application C# RRS feed

  • Question

  • Bonjour

    J'ai mis en place une table dans une base de données qui regroupe un historique. 
    Le code qui me permet d'enregistrer l'historique au format texte est : 

    string maRequeteHistoComplet;
                MySqlCommand maCommandeHistoComplet;
                maRequeteHistoComplet = "SELECT * FROM tblhistorique INTO OUTFILE 'historique.txt' FIELDS TERMINATED BY '\t'  LINES TERMINATED BY '\r\n'";
                maCommandeHistoComplet = new MySqlCommand(maRequeteHistoComplet, maConnexion);
    
    
    
                try
                {
                    maCommandeHistoComplet.Connection.Open();
    
                    maCommandeHistoComplet.ExecuteScalar();
                    maCommandeHistoComplet.Connection.Close();
                }
                catch { MessageBox.Show("Erreur lors de l'ajout"); }


    Le soucis c'est que "INTO OUTFILE" enregistre automatiquement le fichier sur le serveur (on ne peut pas choisir un autre emplacement). J'utilise wamp server et il s'enregistre sur C:\wamp\bin\mysql\mysql5.5.20\data\bdlycee\historique.txt 

    Ceci n'est pas pratique car j'ai rien pour me permet de trouver automatiquement le chemin afin d'ouvrir le fichier ou de le supprimer. 

    Mon code sera amélioré en mettant un place une textbox pour choisir le nom du fichier mais bon ce n'est qu'un bout de code pour le moment. 

    J'aimerais par exemple que le fichier soit déplacé vers le même répertoire où se trouve l'exécutable (après que le fichier a été créé) mais comme je ne sais pas récupérer son emplacement ... 

    Je pourrais le récupérer avec le chemin complet mais si on utilise un autre logiciel pour créer un serveur virtuel ce sera un autre chemin, pas pratique. 

    J'ai fais quelques tests supplémentaires : 

    - J'ai placé 

                    MessageBox.Show(System.IO.Directory.GetCurrentDirectory());

    un peu partout, avant, après, au milieu du try ... catch qui lance la requête MYSQL et ça dit tout le temps que le répertoire qui est en train d'être utilisé c'est bin\debug 

    - J'ai utilisé 

                string fileName = "historique.txt";
    string fullPath = Path.GetFullPath(fileName);

    qui est censé renvoyer le chemin complet vers un fichier et il affiche le truc C:\.....\bin\debug\historique.txt 
    Donc l'application pense que le fichier se trouve là dedans ... sauf qu'il y est pas mais se trouve à : 
    C:\wamp\bin\mysql\mysql5.5.20\data\bdlycee\historique.txt 

    Une solution serait de laisser ce fichier historique.txt se créer où il veut et d'ensuite lancer une fonction qui va rechercher ce fichier sur mon disque dur, récupérer le chemin complet et déplacer ce fichier vers un emplacement que j'aurais marqué. 

    J'ai trouvé des exemples sur internet avec enumeratesFiles, getfiles, etc etc mais à chaque fois soit ça me renvoie un truc bizarre soit ça plante.

    Quelqu'un aurait une idée de comment je pourrais faire ?

    Merci beaucoup



    • Modifié jejedu67 samedi 1 mars 2014 12:36
    samedi 1 mars 2014 12:30

Réponses

Toutes les réponses

  • SVP c'est important
    dimanche 2 mars 2014 09:19
  • Bonjour,

    Avez-vous essayé de saisir le chemin complet du fichier :

    maRequeteHistoComplet = "SELECT * FROM tblhistorique INTO OUTFILE 'C:\...\bin\Debug\historique.txt' FIELDS TERMINATED BY '\t'  LINES TERMINATED BY '\r\n'";          

    Cordialement


    Gilles TOURREAU - MVP C#
    Architecte logiciel/Consultant/Formateur Freelance - P.O.S Informatique
    Blog : http://gilles.tourreau.fr - Suivez-moi sur Twitter
    - MCPD : Enterprise Developper / Windows Developper 3.5 / ASP .NET 3.5/4.0
    - MCSA : SQL Server 2012
    - MCITP : SQL Server 2008 Developper
    - MCTS : ADO .NET 3.5 / SQL Server 2008 Developper / Windows Forms 3.5 / ASP .NET 3.5/4.0 / TFS 2010 / Windows Azure

    dimanche 2 mars 2014 19:00
    Modérateur
  • Bonjour,

    Avez-vous essayé de saisir le chemin complet du fichier :

    maRequeteHistoComplet = "SELECT * FROM tblhistorique INTO OUTFILE 'C:\...\bin\Debug\historique.txt' FIELDS TERMINATED BY '\t'  LINES TERMINATED BY '\r\n'";          

    Cordialement

    Malheureusement ça plante au niveau de la requête quand je fais ça. 

    J'ai testé avec 

    C:\\..\\bin\\Debug\\historique.txt

    C:\\...\\bin\\Debug\\historique.txt

    C:\..\bin\Debug\historique.txt

    Aucun ne fonctionne.

    • Modifié jejedu67 dimanche 2 mars 2014 21:50
    dimanche 2 mars 2014 21:48
  • Bonjour

    Vous lancez une commande MySQL vers le serveur et le serveur l'exécute dans son contexte.
    N'importe quel chemin vous envoyez, le chemin sera celui que le serveur connais (repertoire implicite du serveur).

    Dans les examples MySQL j'ai trouvé :

    SELECT * INTO OUTFILE 'C:\\tmp\\skr.txt' FROM skr;

    ou

    SELECT * INTO OUTFILE 'C:/tmp/skr.txt' FROM skr;

    Cordialement,

    Cordialement,

     


    Aurel BERA, MSFT
    MSDN Community Support. LE CONTENU EST FOURNI "TEL QUEL" SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE.
    S'il vous plaît n'oubliez pas de "Marquer comme réponse" les réponses qui ont résolu votre problème. C'est une voie commune pour reconnaître ceux qui vous ont aidé, et rend plus facile pour les autres visiteurs de trouver plus tard la résolution.

    • Marqué comme réponse jejedu67 jeudi 6 mars 2014 17:08
    lundi 3 mars 2014 08:16
  • Bonjour

    Un petit retour SVP?

    Merci!

    Cordialement, 


    Aurel BERA, MSFT
    MSDN Community Support. LE CONTENU EST FOURNI "TEL QUEL" SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE.
    S'il vous plaît n'oubliez pas de "Marquer comme réponse" les réponses qui ont résolu votre problème. C'est une voie commune pour reconnaître ceux qui vous ont aidé, et rend plus facile pour les autres visiteurs de trouver plus tard la résolution.

    mercredi 5 mars 2014 11:09
  • Bonjour

    Un petit retour SVP?

    Merci!

    Cordialement, 

    Désolé il y avait 3 jours EJP de suite, je n'étais pas à l'ordi. 

    J'ai testé            

    maRequeteHistoComplet = "SELECT * FROM tblhistorique INTO OUTFILE 'C:/Histo/historique.txt' FIELDS TERMINATED BY '\t'  LINES TERMINATED BY '\r\n'";

    Enfin, cela fonctionne :)

    J'étais certain qu'il faut mettre des doubles slash et dans l'autre sens, pour ça je n'ai jamais pensé à tester cela. 

    Si je fais 

    SELECT * INTO OUTFILE 'C:\\Histo\\historique.txt' ....

    Ça me créé le fichier HistoHistorique à l'emplacement C:\wamp\bin\mysql\mysql5.5.20\data

    Très étrange mais bon ça fonctionne maintenant avec la première solution :)

    Merci 1000 fois

    Pour ceux que ça intéresse : 

    Afin d'avoir un chemin valide qu'importe où se trouve l'application qu'importe l'ordinateur, j'ai fais : 

                string Path = Application.ExecutablePath;
                Path = Directory.GetParent(Path).ToString();
                Path = Directory.GetParent(Path).ToString();
                Path = Directory.GetParent(Path).ToString();
                Path = Path.Replace("\\", "/");
                MessageBox.Show(Path);


    La première ligne récupère l'emplacement de l’exécutable, la seconde, la troisième et la quatrième remontent les répertoires jusqu'à l'emplacement que je veux, ensuite afin que ma requête MYSQL fonctionne, je remplace les "\\" qu'il y a par défaut dans le chemin par "/" et cela fonctionne.

    Voilà c'est parfait :)

    Problème résolu.

    Encore merci


    Si vous ne comprenez pas mon truc : 

    Mon .exe se trouve dans 

    C:\Users\admin\Desktop\projet\WindowsFormsApplicationAdminEtHistorique - Copie\WindowsFormsApplicationAdminEtHistorique\bin\Debug

     


    et 

    string Path = Application.ExecutablePath;

    me renvoie pareil mais avec des doubles slash.

    Et encore un petit conseil, ceux qui ont des soucis et qui lisent mon topic, n'hésitez pas à mettre des

    MessageBox.Show("Message");

    ou

    MessageBox.Show(variable contenant une chaîne de caractères);

    Afin de trouver ce qui ne va pas et contrôler petits à petit ce qui se passe (surtout ceux qui ne s'en sortent pas avec les points d'arrêt).

    • Modifié jejedu67 jeudi 6 mars 2014 17:07
    jeudi 6 mars 2014 16:28