C# 无法复制c中的文件夹#
问题在于,将netscan.zip文件中的文件复制到usb时。 它将所有文件解压缩到root 以下是KHTEM文件夹中文件的外观: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
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);
}
}