Как (StartsWith) начать с 4-й буквы? - PullRequest
0 голосов
/ 23 апреля 2019

У меня есть вопрос. Я хочу скопировать определенные файлы в 'Новая папка' в 'Целевая' папка , нажав кнопку. В «Новой папке» содержатся различные файлы с разными именами. Например: "abcUCU0001" , "abbUCA0003" , "hhhUCU0012" , "aaaUCS0012" и многие другие. «Новая папка» содержит более 1000 файлов и имеет те же 10 букв в названии. Я хочу скопировать 10 файлов, и его имя должно иметь "UCU" . Я не знаю, как копировать, используя (начинается с) , начиная с 4-й буквы. Извините за мою плохую грамматику.

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 голосов
/ 23 апреля 2019

Если все файлы находятся в одном каталоге (без подкаталогов), вы можете получить все файлы, используя:

    //assuming diCopyForm is the new folder reference
    // ? denotes 1 character while * is multiple chars
    var files = diCopyForm.GetFiles("???UCU*"); 

А потом просто скопируйте их. Для более сложных критериев я бы взял все файлы и использовал бы LINQ для фильтрации.

Подробная информация об используемом шаблоне поиска

Если в папке много файлов, то может быть более эффективно использовать EnumerateFiles метод

Методы EnumerateFiles и GetFiles отличаются следующим образом: использовать EnumerateFiles, вы можете начать перечисление коллекции имен до возвращения всей коллекции; когда вы используете GetFiles, вы необходимо дождаться возвращения целого массива имен, прежде чем вы сможете получить доступ к массиву. Поэтому, когда вы работаете со многими файлами и каталоги, EnumerateFiles может быть более эффективным.

0 голосов
/ 23 апреля 2019

Вы можете проверить, имеет ли имя файла "UCU" в 4-й позиции с string.IndexOf :

//string filename = "UCU";
if (file.FullName.IndexOf(filename) == 3)
...