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 に答える