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);
}
}
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
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);
vous pouvez stocker le chemin dans une variable de chaîne comme
string s = choofdlog.FileName;
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
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());
}
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, "");
Votre choofdlog
contient une FileName
et FileNames
(pour la sélection multiple) contenant les chemins de fichier, après le retour de ShowDialog()
.
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.