Home > front end >  cannot convert from 'System.Management.EnumerationOptions' to 'System.IO.SearchOption
cannot convert from 'System.Management.EnumerationOptions' to 'System.IO.SearchOption

Time:09-30

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.

CodePudding user response:

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.

  • Related