2 votes

Comment puis-je obtenir à partir d'une chaîne de répertoire uniquement le nom du dernier sous-répertoire et le nom du fichier ?

J'ai cette ligne et comment puis-je obtenir seulement le nom du dernier sous-répertoire et le nom du fichier ?

    label13.Text = Path.GetFileName(file1);

Je n'obtiens que le nom de fichier : test.avi Si je n'utilise pas la fonction Path.GetFileName only file1, j'obtiendrai quelque chose comme :

http://users/test/test/program/test/test.avi

Ce que je veux obtenir, c'est le nom du dernier sous-répertoire qui est : test et le nom du fichier : test.avi Ainsi, dans l'étiquette 13, je verrai : test/test.avi

Comment faire ?

4voto

Cédric Bignon Points 6693

Il suffit d'utiliser Path :

Path.Combine(Path.GetFileName(Path.GetDirectoryName(path)), Path.GetFileName(path))

2voto

squillman Points 4837

Vous pouvez également diviser la chaîne et récupérer les deux derniers éléments du tableau résultant :

string path = "http://users/test/test/program/test/test.avi";
var elements = path.Split('/');
string result = elements[elements.Length-1] + "/" + elements[elements.Length];
System.Console.WriteLine(result);

1voto

0xA3 Points 73439

Vous pouvez utiliser la méthode d'extension suivante pour récupérer l'index du caractère jusqu'à l'avant-dernier index du séparateur de chemin et renvoyer la sous-chaîne correcte :

using System;
using System.Linq;

public static class StringExtensions
{
    public static int NthLastIndexOf(this string value, char c, int n = 1)
    {
        if (count < 1)
        {
            throw new ArgumentOutOfRangeException("count must be greater than 0.");
        }

        var index = 1;
        for (int i = value.Length - 1; i >= 0; i--)
        {
            if (value[i] == c)
            {
                if (index == n)
                {
                    return i;
                }
                index++;
            }
        }
        return -1;
    }
}

class Program
{
    public static string GetEndOfPath(string path)
    {
        var idx = path.NthLastIndexOf('/', 2);
        if (idx == -1)
        {
            throw new ArgumentException("path does not contain two separators.");
        }

        return path.Substring(idx + 1);
    }

    static void Main()
    {
        var result = GetEndOfPath("http://users/test/test/program/test/test.avi");
        Console.WriteLine(result);
    }
}

La méthode d'extension NthLastIndexOf renvoie la position d'indexation basée sur zéro de la nième et dernière occurrence d'un caractère Unicode spécifié. La méthode renvoie -1 si le caractère n'est pas présent au moins n fois dans la chaîne.

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