簡體   English   中英

文件未在C#中從源復制到目標

[英]Files are not copied from source to destination in C#

我正在創建Windows窗體應用程序。我正在使用folderbrowser,textbox1,button。在Folder內部創建Folder和子文件夾。從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
            {
             } 
  }

正如我們在評論期間發現的那樣,您的問題似乎是您沒有得到文件夾列表。

要糾正此問題,必須將突擊隊從以下位置更改:

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%可以正常使用。 因此,我也將其更改為*,例如文件夾。 只是為了節省。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM