#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. Другой вопрос. Пожалуйста, задайте новый вопрос. Это поможет будущим читателям. Мы хотим помочь вам, но мы также хотим помочь тем, кто придет после вас с той же проблемой.