文件不会在C#

时间:2015-11-30 06:07:50

标签: c# winforms

我正在创建Windows表单应用程序。我正在使用folderbrowser,textbox1,button.I在Folder.From textbox1中创建文件夹和子文件夹,它正在选择特定文件夹。在我的if条件下,我选择在textbox1选择的特定文件夹我从目标文件夹中复制文件。我正在复制文件并将其存储在新创建的文件夹中作为目标文件夹(文件夹内的子文件夹)。它正在创建文件夹,子文件夹,但不会将文件从目标文件夹复制到目标文件夹。我不明白我的代码中有什么问题。

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
            {
             } 
  }

1 个答案:

答案 0 :(得分:0)

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

要解决这个问题,必须改变突击队:

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, "*.*");

很好但是如果你有一个没有扩展名的文件我不是100%它的工作原理。因此我也会将此更改为*就像文件夹一样。只是为了保存一面。