web-dev-qa-db-fra.com

Extraire le nom de fichier du chemin

J'ai besoin d'extraire le nom de fichier d'un chemin (une chaîne):

par exemple, "C:\dossier\dossier\dossier\fichier.txt" = "fichier" (ou même "fichier.txt" pour commencer)

Essentiellement tout avant et y compris le dernier \

J'ai entendu parler de l'utilisation de caractères génériques à la place de Regex (comme c'est une implémentation étrange dans VBA?), Mais je ne trouve rien de solide.

Bravo d'avance.

11
Matt Rowles

Merci à kaveman pour l’aide. Voici le code complet que j'ai utilisé pour supprimer à la fois le chemin et l'extension (ce n'est pas une preuve complète, ne prend pas en considération les fichiers contenant plus de 2 décimales, par exemple. * .Tar.gz)

sFullPath = "C:\dir\dir\dir\file.txt"   
sFullFilename = Right(sFullPath, Len(sFullPath) - InStrRev(sFullPath, "\"))
sFilename = Left(sFullFilename, (InStr(sFullFilename, ".") - 1))

sFilename = "fichier"

5
Matt Rowles

Je crois que cela fonctionne, en utilisant VBA:

Dim strPath As String
strPath = "C:\folder\folder\folder\file.txt"

Dim strFile As String
strFile = Right(strPath, Len(strPath) - InStrRev(strPath, "\"))

InStrRev recherche la première instance de "\" à partir de la fin et renvoie la position. Right crée une sous-chaîne à partir de à partir de la droite de longueur donnée, de sorte que vous calculiez la longueur nécessaire à l'aide de Len - InStrRev

19
kaveman

Je cherchais une solution sans code. Cette VBA fonctionne dans la barre de formule Excel:

Pour extraire le nom du fichier:

=RIGHT(A1,LEN(A1)-FIND("~",SUBSTITUTE(A1,"\","~",LEN(A1)-LEN(SUBSTITUTE(A1,"\","")))))

Pour extraire le chemin du fichier:

=MID(A1,1,LEN(A1)-LEN(MID(A1,FIND(CHAR(1),SUBSTITUTE(A1,"\",CHAR(1),LEN(A1)-LEN(SUBSTITUTE(A1,"\",""))))+1,LEN(A1))))
5
live-love

Utiliser Java: 

String myPath="C:\folder\folder\folder\file.txt";
System.out.println("filename " +  myPath.lastIndexOf('\\'));
1
Luixv

Voici une méthode plus simple: a fonction sur une ligne pour extraire uniquement le nom - sans extension de fichier - comme vous l'avez spécifié dans votre exemple :

Function getName(pf):getName=Split(Mid(pf,InStrRev(pf,"\")+1),".")(0):End Function

... alors, en utilisant votre exemple, ceci:

MsgBox getName("C:\folder\folder\folder\file.txt")

résultats:

"file"

Dans les cas où vous voulez extraire le nom de fichier tout en en conservant l’extension de fichier , ou si vous voulez extraire le seul chemin , voici deux autres fonctions à une seule ligne :

Extraire le nom de fichier de x:\path\filename:

Function getFName(pf)As String:getFName=Mid(pf,InStrRev(pf,"\")+1):End Function

Extraire le chemin depuis x:\path\filename:

Function getPath(pf)As String: getPath=Left(pf,InStrRev(pf,"\")): End Function

Exemples:
examples

( La source )

0
ashleedawg

`Vous pouvez aussi essayer:

Sub filen() Dim parts() As String Dim Inputfolder As String, a As String 'Takes input as any file on disk Inputfolder = Application.GetOpenFilename("Folder, *") parts = Split(Inputfolder, "\") a = parts(UBound(parts())) MsgBox ("File is: " & a) End Sub

Ce sous peut afficher le nom du dossier de n’importe quel fichier

0
Akash

Vous pouvez utiliser un FileSystemObject pour cela.

Commencez par inclure une référence pour de Microsoft Scripting Runtime ( VB Barre de menus de l'éditeur> Outils> Références ).

Après cela, vous pouvez utiliser une fonction telle que celle-ci:

Function Get_FileName_fromPath(myPath as string) as string
    Dim FSO as New Scripting.FileSystemObject

    'Check if File Exists before getting the name
    iF FSO.FileExists(myPath) then
        Get_FileName_fromPath = FSO.GetFileName(myPath)
    Else
        Get_FileName_fromPath = "File not found!"
    End if
End Function

Les objets du système de fichiers sont très utiles pour la manipulation de fichiers, en particulier lors de la vérification de leur existence et de leur déplacement. J'aime les utiliser tôt dans la liaison (instruction Dim), mais vous pouvez les utiliser plus tard si vous préférez (instruction CreateObject).

0
FCastro

J'ai également utilisé la suggestion de kaveman avec succès pour obtenir le nom du fichier complet, mais parfois, lorsque mon nom de fichier complet contient beaucoup de points, j’utilisais ce qui suit pour supprimer le bit .txt:

FileName = Left(FullFileName, (InStrRev(FullFileName, ".") - 1))
0
Alan Elston