文件不会在C#中从源复制到目标

本文关键字:复制 目标 文件 | 更新日期: 2023-09-27 18:25:04

我正在创建Windows窗体应用程序。我正在使用文件夹浏览器,文本框1,按钮。我在文件夹中创建文件夹和子文件夹。从文本框1中选择特定的文件夹。在我的if条件中,我选择了在文本框1中选择的特定文件夹,并从目标文件夹中复制文件。我正在复制文件并将其存储在新创建的文件夹中作为目标文件夹(文件夹中的子文件夹)。它正在创建文件夹、子文件夹,但不将文件从目标文件夹复制到目标文件夹。我不明白我的代码出了什么问题。

private void button2_Click(object sender, EventArgs e)
   {
            FolderBrowserDialog folderBrowserDlg = new FolderBrowserDialog();
            folderBrowserDlg.ShowNewFolderButton = true;
            DialogResult dlgResult = folderBrowserDlg.ShowDialog();
            if (dlgResult.Equals(DialogResult.OK))
            {
                textBox1.Text = folderBrowserDlg.SelectedPath;
                Environment.SpecialFolder rootFolder = folderBrowserDlg.RootFolder;
            }
   }

 private void button3_Click(object sender, EventArgs e)
        {
          d();

         }
public void d()
      {
            string s = textBox1.Text;
            string z=@"c:'Users'T'Documents'Visual Studio 2015'Projects'PlatG'PlGames'DATA'AMT8-P47'data'AMT8-P47";
            string k=@"c:'Users'T'Documents'Visual Studio 2015'Projects'PlatG'PlGames'DATA'GDIV8-P89'data'GDIV8-P89";
            string subFolderZ =@"C:'DATA";
            if (!Directory.Exists(subFolderZ))
            {
                Directory.CreateDirectory(subFolderZ);
            }
            if(s==z)
             {
                string subFolderZ1 = Path.Combine(subFolderZ, "AMT8-P47");
                if (!Directory.Exists(subFolderZ1))
                {
                    Directory.CreateDirectory(subFolderZ1);
                    string[] dirs1d = Directory.GetDirectories(s, "*.*", SearchOption.AllDirectories);
                    foreach (var dir in dirs1d)
                    {
                        string destinationPath = @"C:'DATA'AMT8-P47";
                        string[] fileList = System.IO.Directory.GetFiles(dir, "*.*");
                        foreach (string file in fileList)
                        {
                            File.Copy(file, file.Replace(dir, destinationPath), true);
                        }
                    }
                }
              }
             if(s==k)
              {
               string subFolderZ2 = Path.Combine(subFolderZ, "GDIV8-P89");
                if (!Directory.Exists(subFolderZ2))
                {
                    Directory.CreateDirectory(subFolderZ2);
                    // string p = textBox1.Text;
                    string[] dirs1dd = Directory.GetDirectories(s, "*.*",SearchOption.AllDirectories);
                    foreach (var dir in dirs1dd)
                    {
                        string destinationPath = @"C:'DATA'GDIV8-P89";
                        string[] fileList = System.IO.Directory.GetFiles(dir, "*.*");
                        foreach (string file in fileList)
                        {
                            File.Copy(file, file.Replace(dir, destinationPath), true);
                        }
                    }
                }
              }
         else
            {
             } 
  }

文件不会在C#中从源复制到目标

正如我们在评论中发现的那样,您的问题似乎是没有得到文件夹列表。

为了纠正这一点,突击队必须从改为

string[] dirs1d = Directory.GetDirectories(s, "*.*", SearchOption.AllDirectories);

至:

string[] dirs1d = Directory.GetDirectories(s, "*", SearchOption.AllDirectories);

此外,您当前的代码只会提供子目录的所有文件,而不是主目录本身的文件。为此,你必须调整数组的大小(列表会更容易,但数组在那里仍然是可管理的。所以我将使用你目前拥有的数组)。并将主目录添加到列表中。

综合起来:

string[] dirs1d = Directory.GetDirectories(s, "*", SearchOption.AllDirectories);
Array.Resize(ref dirs1d , dirs1d.Length + 1);
dirs1d[dirs1d.Length - 1] = s;
foreach....

获取文件需要注意的一点是:

string[] fileList = System.IO.Directory.GetFiles(dir, "*.*");

很好,但如果你有没有扩展名的文件,我不是百分之百的认为它有效。因此,我也会将其更改为文件夹中的*like。只是为了站在另一边。