文件不会在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
{
}
}
正如我们在评论中发现的那样,您的问题似乎是没有得到文件夹列表。
为了纠正这一点,突击队必须从改为
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。只是为了站在另一边。