如何(StartsWith)以第4个字母开头?

时间:2019-04-23 06:28:06

标签: c# winforms visual-studio-2012 startswith

我有一个问题。我想通过单击按钮将“新文件夹” 中的特定文件复制到“目标”文件夹。在“新文件夹”中包含各种具有不同名称的文件。例如:“ 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”的文件复制到目标文件夹。

2 个答案:

答案 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可以更有效。