将文件保存在由对话框打开的文件夹中

时间:2014-06-05 14:18:08

标签: c# dialog

我的程序有一个树视图,列出了远程计算机中的文件。我需要做的是将这些文件从远程复制到我的本地文件夹之一。我希望当我右键单击treeview中的文件时,会出现一个对话框供我选择文件夹,然后在对话框中单击“确定”,我单击的文件可以保存在该文件夹中。

由于远程文件的路径是unc路径,我正在使用

File.Copy(string remote_address, string local_address)

复制文件。正如我之前所说,我需要一个对话窗口来选择文件夹。所以我尝试使用FolderBowserDialog,但是它的SelectedPath属性只返回不包含文件夹名称的文件夹的路径!而且我没有找到任何属性来返回文件夹的名称。

所以我的问题是:

  1. 如果有办法允许我使用FolderBowserDialog,我可以获得保存文件的位置的完整路径吗?
  2. 如果有另一种方法允许我从远程复制或下载文件,例如使用SaveFileDialog。问题是我不知道如何做到这一点。

3 个答案:

答案 0 :(得分:1)

我不确定你指的是哪个“SavePath”属性,因为FolderBrowserDialog没有这样的属性。您要查找的属性称为SelectedPath

FolderBrowserDialog dlg = new FolderBrowserDialog();
dlg.ShowDialog();

string local_address = dlg.SelectedPath;

答案 1 :(得分:1)

以下内容应该有效:

var fbd = new FolderBrowserDialog();
if(fbd.ShowDialog() == DialogResult.OK)
{
    var localPath= Path.Combine(fbd.SelectedPath, Path.GetFilename(remote_address));
    File.Copy(remote_address, localPath);
}

答案 2 :(得分:0)

调用FolderBrowserDialog的ShowDialog()方法后,它将返回一个变量,指示用户按下的按钮(即,确定或取消)

确保用户使用" Ok"为了表明他们想要继续操作,你可以访问" SelectedPath"字段,它将为您提供他们选择的完整本地路径。

然后,您可以通过调用

获取最终路径
System.IO.Path.Combine(fbd.SelectedPath,remoteFileName);

我假设fbd是你的FolderBrowserDialog实例,而remoteFileName应该只包含远程文件的文件名部分(例如" MyFile.txt");

如果要将文件名与完整的远程路径分开,请使用

var remoteFileName = System.IO.Path.GetFileName(remotePath);

话虽这么说,用户通常期望的不是文件夹浏览器对话框,而是保存文件对话框。

您可以使用文件名初始化保存文件对话框,让用户选择一个文件夹,如果愿意,也可以更改目标文件名。

SaveFileDialog sfd = new SaveFileDialog();
sfd.FileName = remoteFileName;
sfd.ShowDialog();
sfd.FileName // now contains the full path to the file that the user has selected
不要忘记从ShowDialog()调用中获取结果,以确保用户没有取消保存dailog!