Pergunta

Eu preciso de alguma ajuda para renomear algumas imagens em um diretório localizado em / images / graphicsLib /.

Todos os nomes de imagem em / graphicsLib / ter convenção de nomenclatura que se parece com isso: 400-60947.jpg. Chamamos a parte "400" do arquivo do prefixo e chamamos a parte "60957" o sufixo. O nome do arquivo inteiro que chamamos de SKU.

Então, se você viu o conteúdo de / graphicLib / ele ficaria assim:
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 ...

Usando C # & System.IO, o que é uma forma aceitável para renomear todos os arquivos de imagem de base no prefixo do nome do arquivo? Os usuários precisam ser capaz de entrar no prefixo atual, ver todas as imagens na graphicsLib / que correspondem /, em seguida, entrar no novo prefixo para ter todos os arquivos renomeados com o novo prefixo. Apenas o prefixo do arquivo é renomeado, o resto das necessidades de nome de arquivo a ser inalterado.

O que eu tenho até agora é:

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

 }

}
Foi útil?

Solução

Você pode olhar para string.split .

loop sobre todos os arquivos em seu diretório.

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

Isto lhe dará uma série de dois strings:

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

usando o primeiro nome na lista.

Seu novo nome de arquivo, em seguida, torna-se:

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

Depois de renomear o arquivo:

File.Move(oldFileName, newFileName);

Para loop sobre os arquivos no diretório:

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

Outras dicas

Na verdade, você deve iterar cada um dos arquivos no diretório e renomear um por um

Para determinar o novo nome de arquivo, você pode usar algo como:

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

Para renomear o arquivo, você pode usar algo como:

File.Move(oldFileName, newFileName);

Se você não estiver familiarizado com expressões regulares, você deve verificar: http://www.radsoftware.com.au/articles/regexlearnsyntax.aspx

E descarregar este programa para pratice: http://www.radsoftware.com.au/regexdesigner/

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top