в определенном каталоге проверьте, какие файлы имеют определенный префикс имени и удалите этот же префикс - PullRequest
0 голосов
/ 02 мая 2019

В этой папке у меня есть .OK-файлы и .text-файлы, и я должен переименовать те файлы, которые содержат этот префикс ('error_'), НО в определенном порядке, сначала удалить префикс .text-файлов, а затем удалить префикс всех моих файлов .OK, в этом конкретном порядке.

Этот код ниже частично решает мою проблему, но он заменит "" все файлы, содержащие префикс "Error_", сразу

DirectoryInfo d = new DirectoryInfo(@"C:\MyPath");
FileInfo[] infos = d.GetFiles();
foreach(FileInfo f in infos)
{
    File.Move(f.FullName, f.FullName.Replace("Error_",""));
}

Ответы [ 3 ]

0 голосов
/ 02 мая 2019

вы можете легко переместить файл.сначала удалив файл с таким же именем

File.Delete(f.FullName);
0 голосов
/ 02 мая 2019

Если вам нужно изменить файлы .txt перед файлами .OK, вы можете упорядочить данные FileInfo[] в цикле foreach

DirectoryInfo di = new DirectoryInfo(@"D:\temp");

FileInfo[] fileInfos = di.GetFiles();
foreach(var f in fileInfos.OrderByDescending(f => f.Extension))
{
    Console.WriteLine(f.FullName);
}

Это будет повторять файлы .txtсначала, а затем файлы OK.

Если вы хотите быть более конкретным, вы можете использовать Where для их фильтрации:

FileInfo[] fileInfos = di.GetFiles();
foreach(var f in fileInfos.Where(f => f.Extension == ".txt"))
{
    Console.WriteLine(f.FullName);
}

Вы можете изменить этот код насделать его многоразовым для разных расширений: -)

0 голосов
/ 02 мая 2019

Следующий код переименует файл только с расширением .OK и .text, если вы хотите сделать это по порядку, у вас может быть два цикла for для каждого условия «if»:

        DirectoryInfo d = new DirectoryInfo(@"C:\MyPath");
        FileInfo[] infos = d.GetFiles();
        foreach (FileInfo f in infos)
        {
            if (f.FullName.EndsWith(".OK") || f.FullName.EndsWith(".text"))
                File.Move(f.FullName, f.FullName.Replace("Error_", ""));
        }
...