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

OpenFileDialog: manipuler des fichiers "ajouter/enregistrer" [Résolu] - C#/.NET managed - Programmation

Marsh Posté le 28-11-2016 à 12:07:39    

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
Reply

Marsh Posté le 28-11-2016 à 12:07:39   

Reply

Marsh Posté le 28-11-2016 à 12:25:54    

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.


---------------
Topic .Net - C# @ Prog
Reply

Marsh Posté le 28-11-2016 à 12:53:56    

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

Reply

Marsh Posté le 28-11-2016 à 15:37:33    

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 ?
 
 

Reply

Marsh Posté le 28-11-2016 à 15:43:15    

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

---------------
Topic .Net - C# @ Prog
Reply

Marsh Posté le 28-11-2016 à 16:18:33    

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 !

Reply

Marsh Posté le 28-11-2016 à 16:34:30    

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
Reply

Marsh Posté le 28-11-2016 à 16:55:37    

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

---------------
Topic .Net - C# @ Prog
Reply

Marsh Posté le 28-11-2016 à 16:59:53    

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 $ --> *

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed