2

我正在尝试构建一个复印机,以便您使用 openFileDialog 选择一个文件,然后使用 folderBrowserDialog 选择要将其复制到的位置。

我遇到的问题是,当我使用 File.Copy(copyFrom,copyTo) 时,它给了我一个无法复制到目录的异常。

无论如何,这是否存在,或者我只是错过了一些愚蠢和愚蠢的东西。我已经尝试使用 openFD 来选择这两个位置,并且刚刚尝试使用 folderBD 来查看它是否有所作为。

我知道那里应该有 if 语句来捕获异常,但这是开始工作的代码的粗略草案。

提前感谢您的帮助,附上代码。

        // Declare for use in all methods
    public string copyFrom;
    public string copyTo;
    public string rootFolder = @"C:\Documents and Settings\cmolloy\My Documents";

    private void btnCopyFrom_Click(object sender, EventArgs e)
    {
        // uses a openFileDialog, openFD, to chose the file to copy
        copyFrom = "";

        openFD.InitialDirectory = rootFolder;
        openFD.FileName = "";

        openFD.ShowDialog();

        // sets copyFrom = to the file chosen from the openFD
        copyFrom = openFD.FileName;

        // shows it in a textbox
        txtCopyFrom.Text = copyFrom;
    }

    private void btnCopyTo_Click(object sender, EventArgs e)
    {
        //uses folderBrowserDialog, folderBD, to chose the folder to copy to
        copyTo = "";

        this.folderBD.RootFolder = System.Environment.SpecialFolder.MyDocuments;
        this.folderBD.ShowNewFolderButton = false;
        folderBD.ShowDialog();
        DialogResult result = this.folderBD.ShowDialog();

        // sets copyTo = to the folder chosen from folderBD
        copyTo = this.folderBD.SelectedPath;

        //shows it in a textbox.
        txtCopyTo.Text = copyTo;
    }

    private void btnCopy_Click(object sender, EventArgs e)
    {
        // copys file
        File.Copy(copyFrom, copyTo);
        MessageBox.Show("File Copied");
4

3 回答 3

3

您必须将文件名附加到目录路径。做这个:

string destinationPath = Path.Combine(copyTo, Path.GetFileName(copyFrom));
File.Copy(copyFrom, destinationPath);

(这样,您会将所选文件复制到与原始文件同名的另一个目录,如果该目录中已存在相同的文件,则会引发异常)

编辑
旁注:不要在源代码中硬编码路径,使用这个:

rootFolder = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments)

获取当前用户的文档文件夹的路径。

于 2012-05-09T09:01:20.303 回答
1

做这个:

File.Copy(copyFrom, Path.Combine(copyTo, Path.GetFileName(copyFrom)));
于 2012-05-09T09:04:47.870 回答
0

File.Copy 需要知道你想要的新文件的完整路径,包括文件名。如果您只想使用相同的文件名,可以使用它来将文件名附加到路径:

copyTo = Path.Combine(copyTo, Path.GetFileName(copyFrom));
于 2012-05-09T09:02:33.190 回答