Question

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

Tous les noms d'images dans / graphicsLib / ont une convention de dénomination ressemblant à ceci: 400-60947.jpg. Nous appelons le " 400 " une partie du fichier le préfixe et nous appelons le "60957" séparer le suffixe. Le nom de fichier complet que nous appelons le sku.

Donc, si vous voyiez le contenu de / graphicLib /, il ressemblerait à ceci:
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 # & amp; System.IO, quel est un moyen acceptable de renommer tous les fichiers image en fonction du préfixe du nom de fichier? Les utilisateurs doivent pouvoir entrer dans le préfixe actuel, voir toutes les images correspondantes dans le fichier / graphicsLib /, puis entrer dans 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, c'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?

 }

}
Était-ce utile?

La solution

Vous pouvez consulter string.Split . .

Bouclez sur tous les fichiers de votre répertoire.

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

Cela vous donnera un tableau de deux chaînes:

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

en utilisant le pré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 les fichiers du répertoire:

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

Autres conseils

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

Pour déterminer le nouveau nom de 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 vous entraîner: http://www.radsoftware.com.au/regexdesigner/

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top