web-dev-qa-db-ja.com

OpenFileDialogとFolderBrowserDialogからファイルパスを取得する方法は?

ちょっとそこに私は数日前にC#の学習を開始し、選択したディレクトリにファイルをコピーして貼り付ける(必要に応じて置き換える)プログラムを作成しようとしていますが、ディレクトリとファイルパスを取得する方法がわかりませんopenfiledialogおよびfolderbrowserdialog

私は何を間違えていますか?

コードは次のとおりです。

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);
        }
    }
22
user3728981

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           
}
_

FolderBrowserDialogの場合:

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

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

_selected folder_と_selected file name_にアクセスするには、両方の文字列をクラスレベルで宣言できます。

_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
          }
      }
      ....
}
_

[〜#〜] note [〜#〜]

_choofdlog.Multiselect=true;_を保持したので、OpenFileDialog()で複数のファイルを選択できることを意味します(ctrlキーを押してマウスの左クリックで選択できます)。

その場合、選択したすべてのファイルを_string[]_で取得できます。

クラスレベルで:

_string[] arrAllFiles;
_

この行を見つけます(_Multiselect=true_の場合、この行は最初のファイルのみを提供します):

_sSelectedFile = choofdlog.FileName; 
_

すべてのファイルを取得するには、これを使用します:

_arrAllFiles = choofdlog.FileNames; //this line gives array of all selected files
_
41
Hassan

System.IOPathクラスを使用します。 GetDirectoryNameを含むファイルパスを操作するための便利な呼び出しが含まれています。

使い方は簡単です。

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

次のような文字列変数にパスを保存できます

string s = choofdlog.FileName;
3
Dhaval Patel

選択したファイルの完全なファイルパスを取得するには、1つのファイルに FileName プロパティを使用するか、複数のファイルに FileNames プロパティを使用する必要があります。

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

または複数のファイル用

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

ファイルのディレクトリを取得するには、 Path.GetDirectoryName を使用できます
Jon Keetの answer は、パスからディレクトリを取得することに関する同様の質問です。

2
m1o2

このクラスを拡張機能として作成します。

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;
    }
}

次に、この方法で使用できます。

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

動作するプリミティブなクイックフィックス。

OpenFileDialogのみを使用する場合は、FileNameSafeFileNameをキャプチャし、減算してフォルダーパスを取得できます。

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

choofdlogは、ShowDialog()が戻った後、ファイルパスを含むFileNameおよびFileNames(複数選択用)を保持します。

1
i know nothing

ここに返信するのが遅れてすみませんが、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

まだFolderBrowserDialogを使用したことがないので、これについて仲間のコーダーの意見を信頼します。これがお役に立てば幸いです。