ちょっとそこに私は数日前に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);
}
}
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 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
_
System.IO
のPath
クラスを使用します。 GetDirectoryName
を含むファイルパスを操作するための便利な呼び出しが含まれています。
使い方は簡単です。
string directoryPath = System.IO.Path.GetDirectoryName(choofdlog.FileName);
次のような文字列変数にパスを保存できます
string s = choofdlog.FileName;
選択したファイルの完全なファイルパスを取得するには、1つのファイルに FileName プロパティを使用するか、複数のファイルに FileNames プロパティを使用する必要があります。
var file = choofdlog.FileName; // for one file
または複数のファイル用
var files = choofdlog.FileNames; // for multiple files.
ファイルのディレクトリを取得するには、 Path.GetDirectoryName を使用できます
Jon Keetの answer は、パスからディレクトリを取得することに関する同様の質問です。
このクラスを拡張機能として作成します。
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());
}
動作するプリミティブなクイックフィックス。
OpenFileDialog
のみを使用する場合は、FileName
、SafeFileName
をキャプチャし、減算してフォルダーパスを取得できます。
exampleFileName = ofd.SafeFileName;
exampleFileNameFull = ofd.FileName;
exampleFileNameFolder = ofd.FileNameFull.Replace(ofd.FileName, "");
choofdlog
は、ShowDialog()
が戻った後、ファイルパスを含むFileName
およびFileNames
(複数選択用)を保持します。
ここに返信するのが遅れてすみませんが、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を使用したことがないので、これについて仲間のコーダーの意見を信頼します。これがお役に立てば幸いです。