Quel serait le meilleur moyen et plus idiomatique de briser une ficelle en deux à la place du dernier point? Essentiellement séparer l'extension du reste d'un chemin dans un chemin de fichier ou une URL. Jusqu'à présent, ce que je fais est divisé (".") Et ensuite string.join (".") De tout sauf la dernière partie. On dirait que d'utiliser un bazooka pour tuer les mouches. P>
9 Réponses :
Vous pouvez utiliser path.getfilenamewithoutextension () strong> ou si cela ne fonctionnera pas pour vous: p> int idx = filename.LastIndexOf('.');
if (idx >= 0)
filename = filename.Substring(0,idx);
Cela fonctionnera-t-il sur des morceaux d'URL (en utilisant / au lieu de \)? Et cela renvoie-t-il aussi les "dossiers"? Path.getfilename () ne renvoie que le nom du fichier, sans répertoires, afaik.
Si l'OP avait posé des questions sur les chemins de fichiers uniquement, ce serait un +1. Mais les documents System.IO.Path ne mentionnent pas la prise en charge des URL.
Correct, mais cela peut avoir travaillé pour vous si le nom de fichier n'incluait pas de chemin.
Cela pourrait fonctionner, mais malheureusement, cela signifie s'appuyer sur une caractéristique non documentée. Si c'est bien pour vous, System.IO.Path est la solution au problème.
Si les gens se demandent pourquoi path.getextension, etc., ne serait pas i> Travailler: les différentes fonctions de chemin supposent que vous travaillez avec un chemin Windows ... Donc, ils jettent si votre chaîne contient des caractères non valides , comme '<'. J'ai couru dans une affaire juste là où je voulais l'extension d'un dossier qui venait de quelque part où "<" était parfaitement valide et allait ailleurs où il était aussi, ce qui m'a été fait ici à la recherche d'un moyen pur String sur le dernier point, sans le cadre qui tente d'être intelligent et de penser que c'est un nom de fichier, il est donc préférable de faire plus de validation.
la méthode de la chaîne LastIndexof peut-être de certains Utilisez-vous ici ici. P>
Mais les opérateurs de chemin ou de fichierInfo seront mieux adaptés aux opérations basées sur le nom de fichier. p>
Je pense que ce que vous cherchez vraiment est Path.getfilenameWithOntExtension (System.io) mais juste pour le diable:
string input = "foo.bar.foobar";
int lastDotPosition = input.LastIndexOf('.');
if (lastDotPosition == -1)
{
Console.WriteLine("No dot found");
}
else if (lastDotPosition == input.Length - 1)
{
Console.WriteLine("Last dot found at the very end");
}
else
{
string firstPart = input.Substring(0, lastDotPosition);
string lastPart = input.Substring(lastDotPosition + 1);
Console.WriteLine(firstPart);
Console.WriteLine(lastPart);
}
Pour obtenir le chemin sans l'extension, utilisez
if (path == null)
{
return null;
}
int length = path.LastIndexOf('.');
if (length == -1)
{
return path;
}
return path.Substring(0, length);
Si vous voulez des performances, quelque chose comme:
Qu'en est-il de l'utilisation de la méthode LastIndexof qui renvoie la dernière position trouvée d'un personnage. Ensuite, vous pouvez utiliser la sous-chaîne pour extraire ce que vous voulez. P>
string.lastindexof vous retournera la position du point si elle existe jamais dans la chaîne. Vous pouvez ensuite String.Substring Méthodes pour diviser la chaîne. P>
Vous pouvez utiliser la méthode de chaîne p>
LastIndexof et Substring pour accomplir la tâche. P>