web-dev-qa-db-fra.com

nodejs obtient le nom du fichier du chemin absolu?

Si une API pouvait récupérer le nom de fichier d'un chemin de fichier absolu?

par exemple. "foo.txt" de "/var/www/foo.txt"

Je sais que cela fonctionne avec une opération de chaîne, comme fullpath.replace(/.+\//, ''), mais je veux savoir s'il existe un moyen plus "formel", comme file.getName() en Java, de le faire.

NodeJS obtient le nom du fichier du chemin absolu?

232
fxp

Utilisez la méthode basename du module path:

path.basename('/foo/bar/baz/asdf/quux.html')
// returns
'quux.html'

Here est la documentation à partir de laquelle l'exemple ci-dessus est extrait.

449
Victor Stanciu

Pour obtenir la portion de nom de fichier du nom de fichier, la méthode basename est utilisée:

var path = require("path");
var fileName = "C:\\Python27\\ArcGIS10.2\\python.exe";
var file = path.basename(fileName);

console.log(file); // 'python.exe'

Si vous voulez le nom de fichier sans l'extension, vous pouvez passer la variable d'extension (contenant le nom de l'extension) à la méthode basename indiquant à Node de ne renvoyer que le nom sans l'extension:

var path = require("path");
var fileName = "C:\\Python27\\ArcGIS10.2\\python.exe";
var extension = path.extname(fileName);
var file = path.basename(fileName,extension);

console.log(file); // 'python'
24
Rubin bhandari

Si vous savez déjà que le séparateur de chemin est / (c'est-à-dire que vous écrivez pour une plate-forme/un environnement spécifique), comme l'indique l'exemple de votre question, vous pouvez le garder simple et diviser la chaîne par séparateur:

'/foo/bar/baz/asdf/quux.html'.split('/').pop()

Ce serait plus rapide (et plus propre) que de remplacer par une expression régulière.

Encore une fois: Ne le faites que si vous écrivez pour un environnement spécifique, sinon utilisez le module path, car les chemins sont étonnamment complexes. Windows, par exemple, supporte / dans de nombreux cas, mais not par exemple. les préfixes de style \\?\? utilisés pour les dossiers de réseau partagés, etc. Sous Windows, la méthode ci-dessus est vouée à l’échec, tôt ou tard.

3
leo

Pour ceux intéressés à supprimer une extension du nom de fichier, vous pouvez utiliser https://nodejs.org/api/path.html#path_path_basename_path_ext

path.basename('/foo/bar/baz/asdf/quux.html', '.html');
1
Tigertron

Dans NodeJS, __filename.split (/\| //). Pop () renvoie uniquement le nom du fichier à partir du chemin de fichier absolu sur toute plate-forme de système d'exploitation. Pourquoi faut-il se préoccuper de la mémoire/de l’importation d’une API alors que cette approche regex nous permet également de nous rappeler nos compétences en matière de regex?.

0
Visv M

Donc, Nodejs est livré avec la variable globale par défaut appelée '__fileName' qui contient le fichier en cours d'exécution. Mon conseil est de passer le __fileName à un service à partir de n'importe quel fichier, afin que la récupération du nom de fichier soit dynamique.

Ci-dessous, je me sers de la chaîne nomFichier, puis je la divise en fonction du path.sep. Remarque path.sep évite les problèmes liés aux séparateurs de fichiers posix et aux séparateurs de fichiers Windows (problèmes avec '/' et '\'). C'est beaucoup plus propre. Obtenir la sous-chaîne et obtenir uniquement le dernier nom séparé et le soustraire avec la longueur actulale de 3 parle pour lui-même.

Vous pouvez écrire un service comme celui-ci (Notez que ceci est en TypeScript, mais vous pouvez très bien l'écrire en js)

export class AppLoggingConstants {

    constructor(){

    }
      // Here make sure the fileName param is actually '__fileName'
    getDefaultMedata(fileName: string, methodName: string) {
        const appName = APP_NAME;
        const actualFileName = fileName.substring(fileName.lastIndexOf(path.sep)+1, fileName.length - 3);
        //const actualFileName = fileName;
     return appName+ ' -- '+actualFileName;
    }


}

export const AppLoggingConstantsInstance = new AppLoggingConstants();
0
Joey587
var path = require("path");
var filepath = "C:\\Python27\\ArcGIS10.2\\python.exe";
var name = path.parse(filepath).name;

Vous donne le nom du fichier sans extension, si vous le nom avec extension utilisez

var path = require("path");
var filepath = "C:\\Python27\\ArcGIS10.2\\python.exe";
var name = path.basename(filepath);
0
Kevin Muchwat