Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 无法复制c中的文件夹#_C#_Visual Studio - Fatal编程技术网

C# 无法复制c中的文件夹#

C# 无法复制c中的文件夹#,c#,visual-studio,C#,Visual Studio,问题在于,将netscan.zip文件中的文件复制到usb时。 它将所有文件解压缩到root 以下是KHTEM文件夹中文件的外观: c:\Data\install\ <- Files c:\Data\info <- Files c:\Knowhow.exe 我不知道我做错了什么 using System; using System.Collections.Generic; using System.ComponentModel; using System

问题在于,将netscan.zip文件中的文件复制到usb时。 它将所有文件解压缩到root

以下是KHTEM文件夹中文件的外观:

c:\Data\install\     <-  Files
c:\Data\info         <-  Files
c:\Knowhow.exe
我不知道我做错了什么

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

namespace KHupdater
{
    public partial class Install : Form
    {
        public Install()
        {
            InitializeComponent();
            Close.Visible = false;

        }


        //  COPY
        #region  copy

        public static void CopyFolder(string sourcePath, string destinationPath)
        {
            Directory.CreateDirectory(destinationPath);
            // Copy files first.
            foreach (var sourceFile in Directory.GetFiles(sourcePath))
            {
                string destFile = Path.Combine(destinationPath, Path.GetFileName(sourceFile));
                File.Copy(sourceFile, destFile, true);
            }
            foreach (var sourceSubPath in Directory.GetDirectories(sourcePath))
            {
                string destPath = Path.Combine(destinationPath, sourceSubPath.Substring(sourcePath.Length));
                CopyFolder(sourceSubPath, destPath);
            }
        }






        #endregion

        private void Start_Click(object sender, EventArgs e)
        {
            Start.Visible = false;
            Loadingbar.Visible = true;

            string tempfolder = "C:\\KHtemp";
            string tempfile = @"c:\KHtemp\Update.zip";



            // If the 'tempfolder' exists it will be deleted

            if (Directory.Exists(tempfolder))
            {
                Directory.Delete("c:\\KHtemp", true);
            }

            Loadingbar.Value = (10);



            // Make Folder and download file
            if (!Directory.Exists(tempfolder))
            {
                Directory.CreateDirectory(tempfolder);
            }
            WebClient webClient = new WebClient();
            webClient.DownloadFile("http://67.327.195.57/netscan.zip", @"c:\KHtemp\Update.zip");

            Loadingbar.Value = (50);


            // Unrar files in to 'tempfolder'
            ZipFile.ExtractToDirectory(tempfile, tempfolder);

            // Del rar file from 'tempfolder' 
            File.Delete("c:\\KHtemp\\Update.zip");
            //  !?

            Loadingbar.Value = (70);

            // Copy files to USB 
            var StartupPath = Application.StartupPath;
            var root = System.IO.Path.GetPathRoot(StartupPath);



            // Copy All files from 'tempfolder' to root of the USB

            foreach (var sourceFilePath in Directory.GetFiles(tempfolder))
            {
                string fileName = Path.GetFileName(sourceFilePath);
                string destinationFilePath = Path.Combine(root, fileName);
                System.IO.File.Copy(sourceFilePath, destinationFilePath, true);

                CopyFolder(tempfolder, root);
            }

            Loadingbar.Value = (90);


            //// Del 'tempfolder'
            Directory.Delete("c:\\KHtemp", true);

            //// 

            this.Loadingbar.Style = System.Windows.Forms.ProgressBarStyle.Blocks;



            // Show message when done
              Loadingbar.Value = (100);
            label1.Text = "Update is Done";
            Close.Visible = true;
        }

        private void Close_Click(object sender, EventArgs e)
        {
            var StartupPath = Application.StartupPath;
            var root = System.IO.Path.GetPathRoot(StartupPath);
            var Knowhowfile = "Knowhow.exe";

            var Knowhow = Process.Start(root + Knowhowfile);

            Environment.Exit(1);

        }
    }
    }

您需要确定循环中的当前项是文件还是目录。
如果它是一个文件,那么写一个复制代码,如果它是一个目录,那么使用
System.IO.directory.CreateDirectory(“”)手动创建它

您还需要复制每个文件夹-类似这样的方法可以工作:

public static void CopyFolder(string sourcePath, string destinationPath)
{
     Directory.CreateDirectory(destinationPath);
     // Copy files first.
     foreach(var sourceFile in Directory.GetFiles(sourcePath))
     {
          string destFile = Path.Combine(destinationPath, Path.GetFileName(sourceFile));
          File.Copy(sourceFile, destFile, true);
     }
     foreach(var sourceSubPath in Directory.GetDirectories(sourcePath))
     {
          string destPath = Path.Combine(destinationPath, Path.GetFileName(sourceSubPath));
          CopyFolder(sourceSubPath, destPath);
     }
}
您应该调用CopyFolder(tempFolder,root)


请注意,未对其进行测试,您需要调试CopyFolder方法以验证文件夹名称中是否有
?您是否收到任何抛出的异常或警告?不,此代码从头到尾都有效。但是我不会复制c:\khtemp中的子文件夹。这些子文件夹的名称@Tobbe中是否有
?在移动文件夹时有类似的问题,因为System.IO.File似乎有问题,并将这些文件夹视为文件…在这个例子中,当使用这个文件夹时,我称之为“数据”和“信息”的文件夹将把文件夹和子文件夹复制到usb的根目录下。所以我会得到一个F:\info,但它看起来像是C:\KHtemp\data\info。
public static void CopyFolder(string sourcePath, string destinationPath)
{
     Directory.CreateDirectory(destinationPath);
     // Copy files first.
     foreach(var sourceFile in Directory.GetFiles(sourcePath))
     {
          string destFile = Path.Combine(destinationPath, Path.GetFileName(sourceFile));
          File.Copy(sourceFile, destFile, true);
     }
     foreach(var sourceSubPath in Directory.GetDirectories(sourcePath))
     {
          string destPath = Path.Combine(destinationPath, Path.GetFileName(sourceSubPath));
          CopyFolder(sourceSubPath, destPath);
     }
}