web-dev-qa-db-fra.com

Comment obtenir le chemin du fichier depuis OpenFileDialog et FolderBrowserDialog?

Bonjour, j’ai commencé à apprendre le C # il ya quelques jours et j’essaie de créer un programme qui copie et colle des fichiers (et les remplace si nécessaire) dans un répertoire sélectionné, mais je ne sais pas comment obtenir le openfiledialog et folderbrowserdialog

qu'est-ce que je fais mal?

Voici le code:

namespace filereplacer
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void direc_Click(object sender, EventArgs e)
        {
            string folderPath = "";
            FolderBrowserDialog directchoosedlg = new FolderBrowserDialog();
            if (directchoosedlg.ShowDialog() == DialogResult.OK)
            {
                folderPath = directchoosedlg.SelectedPath;
            }
        }

        private void choof_Click(object sender, EventArgs e)
        {

            OpenFileDialog choofdlog = new OpenFileDialog();
            choofdlog.Filter = "All Files (*.*)|*.*";
            choofdlog.FilterIndex = 1;

            choofdlog.Multiselect = true;
            choofdlog.ShowDialog();
        }

        private void replacebtn_Click(object sender, EventArgs e)
        {
          // This is where i'm having trouble
        }

        public static void ReplaceFile(string FileToMoveAndDelete, string FileToReplace, string BackupOfFileToReplace)
        {
            File.Replace(FileToMoveAndDelete, FileToReplace, BackupOfFileToReplace, false);
        }
    }
19
user3728981

Pour OpenFileDialog:

OpenFileDialog choofdlog = new OpenFileDialog();
choofdlog.Filter = "All Files (*.*)|*.*";
choofdlog.FilterIndex = 1;
choofdlog.Multiselect = true;

if (choofdlog.ShowDialog() == DialogResult.OK)    
{     
    string sFileName = choofdlog.FileName; 
    string[] arrAllFiles = choofdlog.FileNames; //used when Multiselect = true           
}

Pour FolderBrowserDialog:

FolderBrowserDialog fbd = new FolderBrowserDialog();
fbd.Description = "Custom Description"; 

if (fbd.ShowDialog() == DialogResult.OK)
{
    string sSelectedPath = fbd.SelectedPath;
}

Pour accéder à selected folder et selected file name, vous pouvez déclarer les deux chaînes au niveau de la classe .

namespace filereplacer
{
   public partial class Form1 : Form
   {
      string sSelectedFile;
      string sSelectedFolder;

      public Form1()
      {
         InitializeComponent();
      }

      private void direc_Click(object sender, EventArgs e)
      {
         FolderBrowserDialog fbd = new FolderBrowserDialog();
         //fbd.Description = "Custom Description"; //not mandatory

         if (fbd.ShowDialog() == DialogResult.OK)      
               sSelectedFolder = fbd.SelectedPath;
         else
               sSelectedFolder = string.Empty;    
      }

      private void choof_Click(object sender, EventArgs e)
      {
         OpenFileDialog choofdlog = new OpenFileDialog();
         choofdlog.Filter = "All Files (*.*)|*.*";
         choofdlog.FilterIndex = 1;
         choofdlog.Multiselect = true;

         if (choofdlog.ShowDialog() == DialogResult.OK)                 
             sSelectedFile = choofdlog.FileName;            
         else
             sSelectedFile = string.Empty;       
      }

      private void replacebtn_Click(object sender, EventArgs e)
      {
          if(sSelectedFolder != string.Empty && sSelectedFile != string.Empty)
          {
               //use selected folder path and file path
          }
      }
      ....
}

REMARQUE:

Comme vous avez conservé choofdlog.Multiselect=true;, cela signifie que vous pouvez sélectionner plusieurs fichiers dans OpenFileDialog() (en appuyant sur la touche ctrl et en faisant un clic gauche pour la sélection).

Dans ce cas, vous pourriez obtenir tous les fichiers sélectionnés dans string[]:

Au niveau de la classe:

string[] arrAllFiles;

Localisez cette ligne (lorsque Multiselect=true cette ligne ne donne que le premier fichier):

sSelectedFile = choofdlog.FileName; 

Pour obtenir tous les fichiers, utilisez ceci:

arrAllFiles = choofdlog.FileNames; //this line gives array of all selected files
39
Hassan

Utilisez la classe Path de System.IO. Il contient des appels utiles pour manipuler les chemins de fichiers, y compris GetDirectoryName qui fait ce que vous voulez, renvoyant la partie répertoire du chemin de fichier.

L'utilisation est simple.

string directoryPath = System.IO.Path.GetDirectoryName(choofdlog.FileName);
3
Moez Rebai

vous pouvez stocker le chemin dans une variable de chaîne comme 

string s = choofdlog.FileName;
3
Dhaval Patel

Pour obtenir le chemin d'accès complet du ou des fichiers sélectionnés, vous devez utiliser FileName propriété pour un fichier ou FileNames propriété pour plusieurs fichiers. 

var file = choofdlog.FileName; // for one file

ou pour plusieurs fichiers 

var files = choofdlog.FileNames; // for multiple files.

Pour obtenir le répertoire du fichier, vous pouvez utiliser Path.GetDirectoryName
Voici répondre de Jon Keet à une question similaire sur l'obtention de répertoires à partir du chemin

2
m1o2

Créer cette classe en tant qu'extension:

public static class Extensiones
{
    public static string FolderName(this OpenFileDialog ofd)
    {
            string resp = "";
            resp = ofd.FileName.Substring(0, 3);
            var final = ofd.FileName.Substring(3);
            var info = final.Split('\\');
            for (int i = 0; i < info.Length - 1; i++)
            {
                resp += info[i] + "\\";
            }
            return resp;
    }
}

Ensuite, vous pourriez utiliser de cette façon:

        //ofdSource is an OpenFileDialog 
        if (ofdSource.ShowDialog(this) == DialogResult.OK)
        {
            MessageBox.Show(ofdSource.FolderName());
        }
1
Ramiro Mosquera

Une solution rapide primitive qui fonctionne.

Si vous utilisez uniquement OpenFileDialog, vous pouvez capturer les FileName, SafeFileName, puis soustrayez pour obtenir le chemin du dossier:

exampleFileName = ofd.SafeFileName;
exampleFileNameFull = ofd.FileName;
exampleFileNameFolder = ofd.FileNameFull.Replace(ofd.FileName, "");
1
S.G.

Votre choofdlog contient une FileName et FileNames (pour la sélection multiple) contenant les chemins de fichier, après le retour de ShowDialog().

1
i know nothing

Je suis désolé si je suis en retard pour répondre ici mais je pensais juste que je devrais jeter une solution beaucoup plus simple pour OpenDialog.

OpenDialog ofd = new OpenDialog();
var fullPathIncludingFileName = ofd.Filename; //returns the full path including the filename
var fullPathExcludingFileName = ofd.Filename.Replace(ofd.SafeFileName, "");//will remove the filename from the full path

Je n'ai pas encore utilisé de FolderBrowserDialog auparavant, je me fierai donc à l'opinion de mes collègues codeurs. J'espère que ça aide.