Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1901 connectés 

  FORUM HardWare.fr
  Programmation
  C#/.NET managed

  [Résolu] OpenFileDialog: manipuler des fichiers "ajouter/enregistrer"

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[Résolu] OpenFileDialog: manipuler des fichiers "ajouter/enregistrer"

n°2292873
recep
Posté le 28-11-2016 à 12:07:39  profilanswer
 

Bonjour,
 
Je travaille avec une application Windows Form et je compte créer une application qui va me chercher (ajouter) x fichiers (.pdf, .xlsx, .docx, etc.) dans une zone de mon Windows form (boite).
 
En résumé, je voudrais créer un bouton "importer ou ajouter" par exemple, qui va me chercher les fichiers que je choisirais dans mes documents (où ailleurs), pour ensuite, une fois les fichiers ajoutés/réunis dans ma boîte, les enregistrer dans un autre dossier. Je suppose que c'est faisable?
 
Quels sont les outils nécessaires de la boîte à outils pour faire cela? Je ne vous demande pas de faire le travail à ma place, mais je ne sais pas quels outils utiliser.
 
Je passerai à la programmation plus tard.  
 
J'espère que vous avez compris ce que je veux faire ?
Merci !


Message édité par recep le 28-11-2016 à 16:36:00
mood
Publicité
Posté le 28-11-2016 à 12:07:39  profilanswer
 

n°2292876
TotalRecal​l
Posté le 28-11-2016 à 12:25:54  profilanswer
 

Je pense que tu cherches le contrôle OpenFileDialog
Il a aussi une propriété Multiselect qui te permet de sélectionner plusieurs fichiers en même temps.
Il y a des centaines d'exemples sur le net donc on te laisse regarder un peu.
 
Si tu as besoin de choisir un répertoire complet plutôt qu'un ensemble de fichier il y a aussi d'autres contrôles.


---------------
Réalisation amplis classe D / T      Topic .Net - C# @ Prog
n°2292878
recep
Posté le 28-11-2016 à 12:53:56  profilanswer
 

TotalRecall a écrit :

Je pense que tu cherches le contrôle OpenFileDialog
Il a aussi une propriété Multiselect qui te permet de sélectionner plusieurs fichiers en même temps.
Il y a des centaines d'exemples sur le net donc on te laisse regarder un peu.
 
Si tu as besoin de choisir un répertoire complet plutôt qu'un ensemble de fichier il y a aussi d'autres contrôles.


ok je regarde de ce côté là, merci TotalRecall

n°2292886
recep
Posté le 28-11-2016 à 15:37:33  profilanswer
 

Voilà, j'arrive à afficher mes différents fichiers dans une "listBox". Maintenant je cherche à sauvegarder les fichiers de la liste vers un dossier.
 
pour l'instant j'ai ce code sur mon bouton "sauvegarder" :
 

Code :
  1. foreach (var item in lstFichiers.Items)
  2. {
  3. string sourceFiles = item.ToString();
  4. File.Move(sourceFiles, @"C:\Users\xxx\Documents\Test\Save\" );
  5. }


mais il me retourne une exception IOException - Impossible de créer un fichier déjà existant.
 
Quand je mets un point d'arrêt sur ma ligne 4. pour "sourceFiles" j'ai : C:\\Users\\xxx\\Documents\\Test\\nomdufichier.txt
 
L'erreur ne viendrait-il pas du double "\\" par hasard et comment en enlever qu'un seul ?
 
 

n°2292887
TotalRecal​l
Posté le 28-11-2016 à 15:43:15  profilanswer
 

File.Move attend en second paramètre un nom de fichier complet (en l'occurrence je suppose le nom actuel de ton fichier tel que tu voudrais qu'il soit dans ton répertoire de sortie), et pas juste un nom de répertoire.

 

Les \\ ne posent pas de souci, au contraire ils sont nécessaires. Le @ dans ta dernière ligne a le même effet, je te laisse regarder à quoi ça correspond. Mot clé pour trouver de quoi il s'agit : "verbatim string".

Message cité 1 fois
Message édité par TotalRecall le 28-11-2016 à 15:44:37

---------------
Réalisation amplis classe D / T      Topic .Net - C# @ Prog
n°2292891
recep
Posté le 28-11-2016 à 16:18:33  profilanswer
 

TotalRecall a écrit :

File.Move attend en second paramètre un nom de fichier complet (en l'occurrence je suppose le nom actuel de ton fichier tel que tu voudrais qu'il soit dans ton répertoire de sortie), et pas juste un nom de répertoire.
 
Les \\ ne posent pas de souci, au contraire ils sont nécessaires. Le @ dans ta dernière ligne a le même effet, je te laisse regarder à quoi ça correspond. Mot clé pour trouver de quoi il s'agit : "verbatim string".


trouvé !
"dans mon code précédent j'ai fait une petite erreur c'est plutôt File.Copy et non File.Move"
voici le code :
 

Code :
  1. foreach (var item in lstFichiers.Items)
  2. {
  3. string sourceFiles = item.ToString();
  4. File.Copy(sourceFiles, @"C:\Users\xxx\Documents\Test\Save\"+ Path.GetFileName(sourceFiles));
  5. }


Merci !

n°2292893
recep
Posté le 28-11-2016 à 16:34:30  profilanswer
 

Pour ceux à qui cela intéresseraient voici le code :

Code :
  1. private void btnAjouterFichiers_Click(object sender, EventArgs e)
  2.         {
  3.             OpenFileDialog ofd = new OpenFileDialog();
  4.             ofd.Multiselect = true;
  5.             ofd.Title = "Ouvrir un ou plusieurs fichiers";
  6.             ofd.Filter = "Tous les fichiers (*.*)|*.*|PDF |*.pdf|Word|*.docx|Word (2003)|*.doc|Excel|*.xlsx|Excel (2003)|*.xls";
  7.             ofd.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments); // Facultatif
  8.             if (ofd.ShowDialog() == DialogResult.OK)
  9.             {
  10.                 foreach (var item in ofd.FileNames)
  11.                 {
  12.                     lstFichiers.Items.Add(item);
  13.                 }
  14.             }
  15.         }


et pour l'enregistrement :

Code :
  1. private void btSauver_Click(object sender, EventArgs e)
  2.         {
  3.             foreach (var item in lstFichiers.Items)
  4.             {
  5.                 string sourceFiles = item.ToString();
  6.                 string chemin = Path.Combine(@"C:\Users\xxx\Documents\Test\Save\" + Path.GetFileName(sourceFiles));
  7.                 if(!File.Exists(chemin))
  8.                     File.Copy(sourceFiles, chemin);
  9.             }
  10.             lstFichiers.Items.Clear();
  11.         }


Si jamais vous avez ajouté un ficher en trop voici comment l'enlever :

Code :
  1. private void btEnlever_Click(object sender, EventArgs e)
  2.         {
  3.             lstFichiers.Items.RemoveAt(lstFichiers.SelectedIndex);
  4.         }


autant pour moi, le code ci-dessus (pour enlever un élément) génère une erreur si jamais la liste est vide, pour remédier à cela voici le bon code :

Code :
  1. private void btEnlever_Click(object sender, EventArgs e)
  2.         {
  3.             if (lstFichiers.SelectedIndex > -1)
  4.                 lstFichiers.Items.RemoveAt(lstFichiers.SelectedIndex);
  5.         }


Message édité par recep le 28-11-2016 à 17:09:35
n°2292894
TotalRecal​l
Posté le 28-11-2016 à 16:55:37  profilanswer
 

T'es sûr la bonne voie  [:cerveau charlest]  
Un petit truc, remplace :
chemin = @"C:\Users\xxx\Documents\Test\Save\"+ Path.GetFileName(sourceFiles)
Par  
chemin = Path.Combine(@"C:\Users\xxx\Documents\Test\Save\", Path.GetFileName(sourceFiles))
C'est la même chose en plus propre !
 
Et pour éviter un gros viandage si le fichier existe déjà tu peux utiliser
if(!File.Exists(chemin))
avant de faire la copie !
 
edit : et dans ton Filter tout à la fin je pense que tu as voulu mettre un astérisque à la place du $ :p

Message cité 1 fois
Message édité par TotalRecall le 28-11-2016 à 16:57:05

---------------
Réalisation amplis classe D / T      Topic .Net - C# @ Prog
n°2292895
recep
Posté le 28-11-2016 à 16:59:53  profilanswer
 

TotalRecall a écrit :

T'es sûr la bonne voie  [:cerveau charlest]  
Un petit truc, remplace :
chemin = @"C:\Users\xxx\Documents\Test\Save\"+ Path.GetFileName(sourceFiles)
Par  
chemin = Path.Combine(@"C:\Users\xxx\Documents\Test\Save\", Path.GetFileName(sourceFiles))
C'est la même chose en plus propre !
 
Et pour éviter un gros viandage si le fichier existe déjà tu peux utiliser
if(!File.Exists(chemin))
avant de faire la copie !
 
edit : et dans ton Filter tout à la fin je pense que tu as voulu mettre un astérisque à la place du $ :p


 
Merci pour les astuces.
 
Effectivement il y a eu une erreur de frappe de ma part pour $ --> *


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C#/.NET managed

  [Résolu] OpenFileDialog: manipuler des fichiers "ajouter/enregistrer"

 

Sujets relatifs
[C] Algo pour trouver un sens d'incrément[Résolu] Mettre à jour/ajouter éléments dans un XML en C#
coment faire tourner un borland C++ sur windoiws10C program from dedicated linux server
[C#/HTML] Formater un email via HTMLSimplifier une ligne de push_back (string) répétitifs
Donner des cours pour Les TD et TP en C[ C ] - Question sur les tableaux de pointeurs
Verifier l'état de la fenêtre d'un exe en C # 
Plus de sujets relatifs à : [Résolu] OpenFileDialog: manipuler des fichiers "ajouter/enregistrer"


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR