0 votes

Renommer les fichiers d'images dans le répertoire du serveur

J'ai besoin d'aide pour renommer certaines images dans un répertoire situé à /images/graphicsLib/.

Tous les noms d'images dans /graphicsLib/ ont une convention d'appellation qui ressemble à ceci : 400-60947.jpg. Nous appelons la partie "400" du fichier le préfixe et nous appelons la partie "60957" le suffixe. Le nom complet du fichier est appelé "sku".

Donc, si vous voyiez le contenu de /graphicLib/, cela ressemblerait à :
400-60957.jpg
400-60960.jpg
400-60967.jpg
400-60968.jpg
402-60988.jpg
402-60700.jpg
500-60725.jpg
500-60733.jpg
etc...

Utilisation de C# Comment renommer tous les fichiers d'images en se basant sur le préfixe du nom du fichier ? Les utilisateurs doivent pouvoir saisir le préfixe actuel, voir toutes les images de la bibliothèque /graphicsLib/ qui correspondent, puis saisir le nouveau préfixe pour que tous ces fichiers soient renommés avec le nouveau préfixe. Seul le préfixe du fichier est renommé, le reste du nom du fichier doit rester inchangé.

Ce que j'ai jusqu'à présent est :

//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?

 }

}

1voto

André Pena Points 6989

En fait, vous devez itérer chacun des fichiers du répertoire et les renommer un par un.

Pour déterminer le nouveau nom du fichier, vous pouvez utiliser quelque chose comme :

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

Pour renommer le fichier, vous pouvez utiliser quelque chose comme :

File.Move(oldFileName, newFileName);

Si vous n'êtes pas familier avec les expressions régulières, vous devriez vérifier : http://www.radsoftware.com.au/articles/regexlearnsyntax.aspx

Et téléchargez ce logiciel pour le mettre en pratique : http://www.radsoftware.com.au/regexdesigner/

1voto

ChrisF Points 74295

Vous pourriez regarder string.Split .

Boucle sur tous les fichiers de votre répertoire.

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

Cela vous donnera un tableau de deux chaînes de caractères :

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

en utilisant le premier nom de votre liste.

Votre nouveau nom de fichier devient alors :

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

Ensuite, pour renommer le fichier :

File.Move(oldFileName, newFileName);

Pour parcourir en boucle les fichiers du répertoire :

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X