Каталог недействителен. Что не так? копирование файла из источника в место назначения - PullRequest
0 голосов
/ 10 мая 2019

Итак, я пытаюсь скопировать файл из источника в место назначения.Я создаю форму окна, где у меня есть кнопки, источник и назначение.Они используются, чтобы получить файл, а затем получить назначение.затем другая кнопка используется для копирования этого файла в место назначения.когда я щелкаю пункт назначения, я получаю «Недопустимое имя каталога».

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace CopyDirectory
{
public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }

    private void Form1_Load(object sender, EventArgs e)
    {

    }
    string file = "";
    private void button1_Click(object sender, EventArgs e)
    {
        DialogResult result = openFileDialog1.ShowDialog();
        if (result == DialogResult.OK) // Test result.
        {
            //opens the file source & shows it in a label
            file = openFileDialog1.FileName;
            try
            {
                string text = File.ReadAllText(file);
                int size = text.Length;
                string sfile = Path.GetFileName(file);
                lbl_sfile.Text = sfile; // for full location
            }
            catch (IOException)
            {
            }
        }
    }

    private void button2_Click(object sender, EventArgs e)
    {
        DialogResult result = folderBrowserDialog1.ShowDialog();
        if (result == DialogResult.OK) // Test result.
        {
            //saves the file destination & shows it in a label

            //use file2 string to save file into destination

            if (folderBrowserDialog1.ShowDialog() == DialogResult.OK)
            {
                lbl_dfile.Text = folderBrowserDialog1.SelectedPath;
            }
        }
    }
    private void Caluculate(int i)
    {
        double pow = Math.Pow(i, i);
    }

    private void bttn_savefile_Click(object sender, EventArgs e)
    {
        //collect label text as strings
        string file2 = lbl_sfile.Text.ToString();
        string file3 = lbl_dfile.Text.ToString();

        string sourceDir = file;
        string backupDir = folderBrowserDialog1.SelectedPath;

        Path.Combine(file2, Path.GetFileName(file3));

        string[] picList = Directory.GetFiles(sourceDir, "*.jpg");
        string[] txtList = Directory.GetFiles(sourceDir, "*.txt");

        // Copy text files.
        foreach (string f in txtList)
        {

            // Remove path from the file name.
            string fName = f.Substring(sourceDir.Length + 1);

            try
            {
                // Will not overwrite if the destination file already exists.
                File.Copy(Path.Combine(sourceDir, fName), Path.Combine(backupDir, fName));
            }

            // Catch exception if the file was already copied.
            catch (IOException copyError)
            {
                Console.WriteLine(copyError.Message);
            }
        }


        // Set the initial value of the ProgressBar.
        progressBar1.Value = 10;

        progressBar1.Maximum = 100000;
        progressBar1.Step = 1;

        for (int j = 0; j < 100000; j++)
        {
            Caluculate(j);
            progressBar1.PerformStep();
        }
    }

    private void progressBar1_Click(object sender, EventArgs e)
    {

    }
  }
}

1 Ответ

0 голосов
/ 10 мая 2019

Прежде всего, для некоторого чистого кода ваше field с именем file должно быть, по крайней мере, property, а имя должно отражать то, что оно есть на самом деле, поэтому:

string file = "";

до

private string FileFullPath { get; set; }

Тогда реальная проблема заключается в том, что вы присваиваете полный путь к файлу, включая его имя, file: file = openFileDialog1.FileName;, а затем рассматриваете его как каталог string sourceDir = file;, что должно быть очевиднымпочему это не получится ... если нет ... вам нужно взять полный путь и просто получить каталог, например:

var sourceDir = Path.GetDirectoryName(FileFullPath);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...