Переименовать файлы изображений в каталоге сервера

StackOverflow https://stackoverflow.com/questions/1603795

  •  05-07-2019
  •  | 
  •  

Вопрос

Мне нужна помощь в переименовании некоторых изображений в каталоге, расположенном в / images / graphicsLib / .

Все имена изображений в / graphicsLib / имеют соглашение об именах, которое выглядит следующим образом: 400-60947.jpg. Мы называем "400" часть файла префикс и мы называем «60957» часть суффикса. Полное имя файла мы называем sku.

Итак, если вы увидели содержимое / graphicLib /, оно выглядело бы так:
400-60957.jpg
400-60960.jpg
400-60967.jpg
400-60968.jpg
402-60988.jpg
402-60700.jpg
500-60725.jpg
500-60733.jpg
и т.д ...

Использование C # & amp; System.IO, как можно переименовать все файлы изображений, используя префикс имени файла? Пользователи должны иметь возможность ввести текущий префикс, просмотреть все изображения в / graphicsLib /, которые соответствуют, а затем ввести новый префикс, чтобы все эти файлы были переименованы с новым префиксом. Переименовывается только префикс файла, остальная часть имени файла должна быть неизменной.

То, что у меня есть, это:

//enter in current prefix to see what images will be affected by
// the rename process,
// bind results to a bulleted list.
// Also there is a textbox called oldSkuTextBox and button
// called searchButton in .aspx


private void searchButton_Click(object sender, EventArgs e)

{

string skuPrefix = oldSkuTextBox.Text;


string pathToFiles = "e:\\sites\\oursite\\siteroot\\images\graphicsLib\\";  

string searchPattern = skuPrefix + "*";

skuBulletedList.DataSource = Directory.GetFiles(pathToFiles, searchPattern);

skuBulletedList.DataBind();

}



//enter in new prefix for the file rename
//there is a textbox called newSkuTextBox and
//button called newSkuButton in .aspx

private void newSkuButton_Click(object sender, EventArgs e)

{

//Should I loop through the Items in my List,
// or loop through the files found in the /graphicsLib/ directory?

//assuming a loop through the list:

foreach(ListItem imageFile in skuBulletedList.Items)

{

string newPrefix  = newSkuTextBox.Text;

//need to do a string split here?
//Then concatenate the new prefix with the split
//of the string that will remain changed?

 }

}
Это было полезно?

Решение

Вы можете посмотреть string.Split .

Переберите все файлы в вашем каталоге.

string[] fileParts = oldFileName.Split('-');

Это даст вам массив из двух строк:

fileParts[0] -> "400"
fileParts[1] -> "60957.jpg"

используя имя в вашем списке.

Ваше новое имя файла становится:

if (fileParts[0].Equals(oldPrefix))
{
    newFileName = string.Format("(0)-(1)", newPrefix, fileParts[1]);
}

Затем, чтобы переименовать файл:

File.Move(oldFileName, newFileName);

Чтобы зациклить файлы в каталоге:

foreach (string oldFileName in Directory.GetFiles(pathToFiles, searchPattern))
{
    // Rename logic
}

Другие советы

На самом деле вы должны выполнить итерацию каждого из файлов в каталоге и переименовать один за другим

Чтобы определить новое имя файла, вы можете использовать что-то вроде:

String newFileName = Regex.Replace("400-60957.jpg", @"^(\d)+\-(\d)+", x=> "NewPrefix" + "-" + x.Groups[2].Value);

Чтобы переименовать файл, вы можете использовать что-то вроде:

File.Move(oldFileName, newFileName);

Если вы не знакомы с регулярными выражениями, вам следует проверить: http://www.radsoftware.com.au/articles/regexlearnsyntax.aspx

И загрузите это программное обеспечение на практике: http://www.radsoftware.com.au/regexdesigner/

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top