Rinomina i file di immagine nella directory del server
Domanda
Ho bisogno di aiuto per rinominare alcune immagini in una directory che si trova in / images / graphicsLib /.
Tutti i nomi delle immagini in / graphicsLib / hanno una convenzione di denominazione simile a questa: 400-60947.jpg. Chiamiamo il "400" parte del file il prefisso e chiamiamo "60957" parte il suffisso. L'intero nome del file che chiamiamo sku.
Quindi se vedessi il contenuto di / graphicLib / sembrerebbe:
400-60957.jpg
400-60960.jpg
400-60967.jpg
400-60968.jpg
402-60988.jpg
402-60700.jpg
500-60725.jpg
500-60733.jpg
ecc ...
Uso di C # & amp; System.IO, qual è un modo accettabile per rinominare tutti i file immagine in base al prefisso del nome file? Gli utenti devono poter inserire il prefisso corrente, vedere tutte le immagini in / graphicsLib / corrispondenti, quindi inserire il nuovo prefisso per rinominare tutti quei file con il nuovo prefisso. Viene rinominato solo il prefisso del file, il resto del nome del file deve essere invariato.
Quello che ho finora è:
//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?
}
}
Soluzione
Puoi guardare string.Split .
Scorri su tutti i file nella tua directory.
string[] fileParts = oldFileName.Split('-');
Questo ti darà una matrice di due stringhe:
fileParts[0] -> "400"
fileParts[1] -> "60957.jpg"
utilizzando il nome nell'elenco.
Il tuo nuovo nome file diventa quindi:
if (fileParts[0].Equals(oldPrefix))
{
newFileName = string.Format("(0)-(1)", newPrefix, fileParts[1]);
}
Quindi, per rinominare il file:
File.Move(oldFileName, newFileName);
Per passare in rassegna i file nella directory:
foreach (string oldFileName in Directory.GetFiles(pathToFiles, searchPattern))
{
// Rename logic
}
Altri suggerimenti
In realtà dovresti iterare ciascuno dei file nella directory e rinominarlo uno per uno
Per determinare il nome del nuovo file, puoi usare qualcosa come:
String newFileName = Regex.Replace("400-60957.jpg", @"^(\d)+\-(\d)+", x=> "NewPrefix" + "-" + x.Groups[2].Value);
Per rinominare il file, puoi usare qualcosa come:
File.Move(oldFileName, newFileName);
Se non si ha familiarità con le espressioni regolari, è necessario controllare: http://www.radsoftware.com.au/articles/regexlearnsyntax.aspx
E scarica questo software per esercitarti: http://www.radsoftware.com.au/regexdesigner/