2010-05-20 3 views
0

J'ai un problème étrange et je n'arrive pas à le comprendre.Problème avec Regex.Replace() lors de la modification d'un nom de fichier

Mon nom est quelque chose comme ceci:
DER 1513016-3.020F.NCF.

Je veux être en mesure de changer à:
DER 1513016-3.020H.NCF

Parfois, le nom du fichier peut être cela aussi:
DER 1513016-3.020F_NEW.NCF

qui deviendrait:
DER 1513016-3.020H_NEW.NCF

Ceci est mon code pour le faire:

OpenFileDialog fDialog = new OpenFileDialog(); 
fDialog.Title = "Open"; 
fDialog.Filter = "NCF files (*.ncf)|*.ncf|All files (*.*)|*.*"; 
fDialog.InitialDirectory = "C:\\Program Files"; 
if (fDialog.ShowDialog() == DialogResult.OK) 
{ 
    string newfilename; 
    string fileext = Path.GetExtension(fDialog.FileName); 

    newfilename = Regex.Replace(fDialog.FileName, "F.NCF", "H.NCF"); 
    newfilename = Regex.Replace(fDialog.FileName, "F_NEW.NCF", "H_NEW.NCF"); 
} 

C'est là que ça devient bizarre. La façon dont le code fonctionne maintenant, il ne changera pas le nom du fichier à DER 1513016-3.020H.NCF

Si je commente cette ligne de code:

//newfilename = Regex.Replace(fDialog.FileName, "F_NEW.NCF", "H_NEW.NCF"); 

cela fonctionnera très bien et le fichier deviendra maintenant: DER 1513016-3.020H.NCF

Cependant, si je décommenter cette ligne de code, le nom ne changera pas à DER 1513016-3.020H.NCF. Il restera comme DER 1513016-3.020F.NCF.

Pourquoi cette ligne de code provoque la routine de ne pas chang e le nom de fichier?

Répondre

2

Utilisez newfilename au lieu de fDialog.FileName au deuxième appel ou la valeur de retour du premier ne sera jamais utilisée. PS: vous pouvez utiliser String.Replace au lieu de Regex.Replace car vous n'utilisez aucune expression régulière. De plus, le point signifie "n'importe quel caractère" dans une regex, donc vous devriez envisager de l'échapper.

+0

Génial. Merci. – fraXis

Questions connexes