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?

 }

}
È stato utile?

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/

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top