Search code examples
c#.netvisual-studio-2019windows-forms-designer.net-framework-version

cannot convert from 'System.Management.EnumerationOptions' to 'System.IO.SearchOption


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using Microsoft.VisualBasic.FileIO;
using System.Management;

namespace test_code
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        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
            RenamePngFiles(folderDlg.SelectedPath);
        }
        private void RenamePngFiles(string directoryPath)
        {
            int fileNameSuffixCounter = 1;
            foreach (string originalFullFileName in System.IO.Directory.EnumerateFiles(directoryPath, "*.png", new EnumerationOptions()))
            {
                // The new file name without path
                var newFileName = $"{System.IO.Path.GetFileNameWithoutExtension(originalFullFileName)}#{fileNameSuffixCounter++}{System.IO.Path.GetExtension(originalFullFileName)}";

                FileSystem.RenameFile(originalFullFileName, newFileName);
            }
        }
    }
}

Above is my code and I am not sure why i am not able to remove the above error. I tried all sorts of namespace and i cannot of get rid of it. I am using .netframework 4.7.2. AS you can see all I am trying to do is rename all the files in a folder including subfolder to append with # and a number which keep on increasing depending on the number of files in a folder.


Solution

  • Combined with the comments above, I made the following changes.

    Updated:

    Modify all png files in the selectedPath.

    RenameAllPngFiles(folderDlg.SelectedPath);
    

    The following are custom functions:

    Rename all png files :

    private void RenameAllPngFiles(string directoryPath) {
        RenameCurrentPng(directoryPath);
        foreach (var item in GetDirectoryInfos(directoryPath)) {
            RenameCurrentPng(item.FullName);
        }
    }
    

    Rename all png files in the current directory:

    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);
        }
    }
    

    Get the addresses of all subfolders :

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

    If you have questions about my code, please comment below and I will follow up.