Пропустите разговор о переименовании файла, если в имени файла есть #2, #3 или #(любое число)

#c#

Вопрос:

Ниже приведен мой код, в котором я успешно переименовываю только файлы внутри папки a, а также просматриваю все вложенные папки и переименовываю все файлы .png.

Я пытаюсь добавить настройку, в которой, если имя файла уже имеет #1 или #5 или любое #(число), я хочу, чтобы разговор пропустил этот файл и перешел к следующему файлу

 private void button1_Click(object sender, EventArgs e)
    {
        FolderBrowserDialog folderDlg = new FolderBrowserDialog();
        //folderDlg.ShowDialog();
        if (folderDlg.ShowDialog() != DialogResult.OK)
        {
            return;
        }

        // Has different framework dependend implementations 
        // in order to handle unauthorized access to subfolders
        RenameAllPngFiles(folderDlg.SelectedPath);
    }
    private void RenameAllPngFiles(string directoryPath)
    {
        RenameCurrentPng(directoryPath);
        foreach (var item in GetDirectoryInfos(directoryPath))
        {
            RenameCurrentPng(item.FullName);
        }
    }

    private void RenameCurrentPng(string directoryPath)
    {
        int fileNameSuffixCounter = 1;
        foreach (string originalFullFileName in Directory.EnumerateFiles(directoryPath, "*.png"))
        {
            // The new file name without path
            var newFileName = $"{System.IO.Path.GetFileNameWithoutExtension(originalFullFileName)}#{fileNameSuffixCounter  }{System.IO.Path.GetExtension(originalFullFileName)}";
            FileSystem.RenameFile(originalFullFileName, newFileName);
        }
    }

    private DirectoryInfo[] GetDirectoryInfos(string directoryPath)
    {
        DirectoryInfo di = new DirectoryInfo(directoryPath);
        DirectoryInfo[] directories = di.GetDirectories("*", System.IO.SearchOption.AllDirectories);
        return directories;
    }
 

Комментарии:

1. В вашем посте нет ничего, связанного с последними тремя тегами — вы должны удалить их

2. Я подозреваю, что часть решения будет заключаться в поиске # в имени файла.

3. да, правильно, но мне интересно, как интегрировать в коды

4. Вы можете использовать IndexOf метод для строки или использовать регулярное выражение, чтобы проверить, # существует ли оно в имени файла или нет..

Ответ №1:

Просто используй веревочку.Содержит метод для проверки #.

     private void RenameCurrentPng(string directoryPath)
    {
        int fileNameSuffixCounter = 1;
        foreach (string originalFullFileName in Directory.EnumerateFiles(directoryPath, "*.png"))
        {
            string ShortFileName = System.IO.Path.GetFileNameWithoutExtension(originalFullFileName);
            if (!ShortFileName.Contains("#"))
            { 
            // The new file name without path
            var newFileName = $"{ShortFileName}#{fileNameSuffixCounter  }{System.IO.Path.GetExtension(originalFullFileName)}";
            FileSystem.RenameFile(originalFullFileName, newFileName);
            }
        }
    }
 

Комментарии:

1. могу я узнать, как я всегда могу заставить приложение открывать определенную папку, когда я нажимаю кнопку?

2. Другой вопрос. Пожалуйста, задайте новый вопрос. Это поможет будущим читателям. Мы хотим помочь вам, но мы также хотим помочь тем, кто придет после вас с той же проблемой.