我有一个问题。我想通过单击按钮将“新文件夹” 中的特定文件复制到“目标”文件夹。在“新文件夹”中包含各种具有不同名称的文件。例如:“ abcUCU0001” ,“ abbUCA0003” ,“ hhhUCU0012” ,“ aaaUCS0012” 等。 “新文件夹”包含超过 1000个文件,并且名称中的10个字母相同。我要复制10个文件,其名称必须具有“ UCU” 。我不知道如何使用以 4th 字母开头的(startsWith)。 对不起,我的语法不好。
private void button1_Click(object sender, EventArgs e)
{
string FROM_DIR = @"C:\Users\Desktop\Source";
string TO_DIR = @"C:\Users\Desktop\Target";
DirectoryInfo diCopyForm = new DirectoryInfo(FROM_DIR);
DirectoryInfo[] fiDiskfiles = diCopyForm.GetDirectories();
string filename = "UCU";
int count = 0;
foreach (DirectoryInfo newfile in fiDiskfiles)
{
try
{
if (newfile.Name=="New folder")
{
foreach (FileInfo file in newfile.GetFiles())
{
if(file.FullName.StartsWith(filename))
{
File.Copy(file.FullName, Path.Combine(TO_DIR,file.Name));
count++;
if (count == 10)
{
break;
}
}
}
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
MessageBox.Show("success");
}
我希望单击按钮后,会将10个名称为“ UCU”的文件复制到目标文件夹。
答案 0 :(得分:0)
您可以使用string.IndexOf检查文件名是否在第4位具有“ UCU”:
//string filename = "UCU";
if (file.FullName.IndexOf(filename) == 3)
答案 1 :(得分:0)
如果所有文件都在同一目录中(没有子目录),则可以使用以下方法获取所有文件:
//assuming diCopyForm is the new folder reference
// ? denotes 1 character while * is multiple chars
var files = diCopyForm.GetFiles("???UCU*");
然后将它们复制过来。对于更复杂的条件,我将获取所有文件并使用LINQ进行过滤。
Details about the search pattern used
如果文件夹中有很多文件,则使用EnumerateFiles方法可能更有效
EnumerateFiles和GetFiles方法的区别如下: 使用EnumerateFiles,您可以开始枚举名称集合 在归还全部收藏品之前;当您使用GetFiles时,您 必须等待返回整个名称数组,然后才能 访问数组。因此,当您处理许多文件时, 目录中,EnumerateFiles可以更有效。