289 votes

Suppression de l'extension de fichier d'une chaîne de noms de fichiers

Si j'ai une chaîne de caractères disant "abc.txt" existe-t-il un moyen rapide d'obtenir une sous-chaîne qui soit juste "abc" ?

Je ne peux pas faire un fileName.IndexOf('.') parce que le nom du fichier pourrait être "abc.123.txt" ou quelque chose du genre et je veux évidemment me débarrasser de l'extension (c.-à-d. "abc.123" ).

493voto

R. Martinho Fernandes Points 96873

El Path.GetFileNameWithoutExtension vous donne le nom de fichier que vous passez en argument sans l'extension, comme cela devrait être évident d'après le nom.

1 votes

J'allais suggérer : string.Format( "{0} \\ {1}", Path.GetDirectoryName( path ), Path.GetFileNameWithoutExtension( path ) ) ... mais j'ai vu une version encore meilleure ci-dessous en utilisant Path.Combine au lieu de String.Format !

7 votes

La préservation du chemin n'est pas un effet recherché, notez que le nom de la méthode est GetFileNameWithoutExtension. Si la préservation du chemin était promise, alors le nom de la méthode aurait dû être différent. La description de la méthode est également très spécifique, seul le nom de fichier sans extension est retourné. Le PO ne précise pas qu'il a besoin du chemin. C'est plutôt le contraire.

2 votes

@dukevin rien dans cette question n'a à voir avec le chemin. Elle demande simplement la suppression de l'extension du nom de fichier .

347voto

Ran QUAN Points 41

Il existe une méthode dans le framework à cet effet, qui conservera le chemin complet sauf l'extension.

System.IO.Path.ChangeExtension(path, null);

Si seul le nom du fichier est nécessaire, utilisez

System.IO.Path.GetFileNameWithoutExtension(path);

53 votes

C'est la bonne réponse. La réponse acceptée bande le chemin du fichier

9 votes

C'est une meilleure réponse car elle préserve le chemin.

10 votes

El null a une valeur magique ici. Si vous utilisez String.Empty alias "" vous vous retrouverez avec une queue [ . ] point.

60voto

Paul Heasley Points 690

Vous pouvez utiliser

string extension = System.IO.Path.GetExtension(filename);

Et ensuite, supprimez l'extension manuellement :

string result = filename.Substring(0, filename.Length - extension.Length);

0 votes

@Bio, en fait, cela récupère la longueur de l'extension, puis saisit le nom du fichier jusqu'à l'extension.

1 votes

Si vous décidez d'ignorer la fonctionnalité System.IO.Path, il n'est pas préférable d'obtenir l'extension comme suit : string extension = filename.Substring(filename.LastIndexOf('.')) ; ?

33voto

Andrew Points 141

String.LastIndexOf fonctionnerait.

string fileName= "abc.123.txt";
int fileExtPos = fileName.LastIndexOf(".");
if (fileExtPos >= 0 )
 fileName= fileName.Substring(0, fileExtPos);

10 votes

Faites attention aux fichiers sans extension, comme foo/bar.cat/cheese ¡!

0 votes

String.LastIndexOf est dangereux pour accomplir quelque chose comme ça. Pour les fichiers sans extension, comme @Cameron l'a indiqué ci-dessus, vos résultats peuvent ne pas être ceux que vous souhaitez. La façon la plus sûre de procéder est d'utiliser La réponse de @Logman ci-dessus.

16voto

Logman Points 69

Si vous voulez créer un chemin complet sans extension, vous pouvez faire quelque chose comme ceci :

Path.Combine( Path.GetDirectoryName(fullPath), Path.GetFileNameWithoutExtension(fullPath))

mais je cherche un moyen plus simple de le faire. Quelqu'un a-t-il une idée ?

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X