Frage

Ich brauche Hilfe in ein paar Bilder in einem Verzeichnis umbenennen unter / images / graphicsLib /.

Alle Bildnamen in / graphicsLib / Namenskonvention, die wie folgt aussieht: 400-60947.jpg. Wir nennen das „400“ Teil der Datei das Präfix und wir nennen das „60957“ Teil das Suffix. Die gesamten Dateinamen nennen wir die sku.

Wenn Sie also den Inhalt von / graphicLib sehen / es würde so aussehen:
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 ...

Mit C # & System.IO, was ein akzeptabler Weg, um alle Bilddateien Basis auf dem Präfix des Dateinamen umbenennen? Benutzer müssen in dem aktuellen Präfix eingeben zu können, sehen Sie alle Bilder im Verzeichnis / graphicsLib / dieses Spiel, dann in der neuen Vorwahl eingeben all diese Dateien mit dem neuen Präfix umbenannt hat. Nur das Präfix der Datei umbenannt wird, der Rest des Dateinamens unverändert sein muss.

Was ich habe, so weit ist:

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

 }

}
War es hilfreich?

Lösung

Sie könnten sehen String.split .

Schleife über alle Dateien in Ihrem Verzeichnis.

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

Dies wird Ihnen eine Reihe von zwei Strings:

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

die ersten Namen in Ihrer Liste.

Ihr neuer Dateiname wird dann:

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

Dann die Datei umbenennen:

File.Move(oldFileName, newFileName);

Um Schleife über die Dateien im Verzeichnis:

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

Andere Tipps

Eigentlich sollten Sie jede der Dateien im Verzeichnis iterieren und benennen Sie eins nach dem anderen

die neuen Dateinamen zu bestimmen, können Sie so etwas wie verwenden:

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

Sie die Datei umbenennen möchten, können Sie so etwas wie verwenden:

File.Move(oldFileName, newFileName);

Wenn Sie nicht vertraut mit regulären Ausdrücken sind, sollten Sie überprüfen: http://www.radsoftware.com.au/articles/regexlearnsyntax.aspx

Und diese Software herunterzuladen, um pratice: http://www.radsoftware.com.au/regexdesigner/

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top