2016-11-21 4 views
3

Comment puis-je obtenir le chemin absolu d'un répertoire (pas le répertoire de travail courant) dans l'application nœud webkit? Exemple (Mac OS) - J'ai créé un dossier nommé A dans Documents. Quand je fais getDirectory avec entrée dans le répertoire du système de fichiers, je ne peux obtenir dir.fullPath qui retourne AObtenir le chemin complet d'un répertoire dans le nœud webkit

app.workspace.getDirectory(self.folderpath, {}, function(dir){ 
    if(dir) console.log('Dir: ', dir); 
}); 

Mais je dois: ~/Documents/A/ || c:\Users\Username\Documents

Dans mon application, les utilisateurs peuvent choisir/créer un répertoire où ils veulent et je stocke/lis les données de ce dossier.

Chemin absolu peut ne pas être ce que je dois mais je veux ouvrir les fichiers (PDF, doc ...) avec des applications de bureau par défaut:

function getCommandLine() { 
    switch (process.platform) { 
     case 'darwin' : return 'open'; 
     case 'win32' : return 'start'; 
     case 'win64' : return 'start'; 
     default : return 'xdg-open'; 
    } 
} 

var exec = require('child_process').exec; 
var filepath = '...'; 
//dir.fullPath will throw: The file /A/example.pdf does not exist. 

var child = exec(getCommandLine() + ' ' + filepath, function (error, stdout, stderr) { 
    if (error) { 
     console.error(`exec error: ${error}`); 
      return; 
    } 
}); 
child.on('close', function (e) { 
    console.log('E: ', e); 
}); 

Répondre

0

En fait, j'ai récemment découvert (je ne peux pas croire que je l'ai raté en premier lieu mais), avec le système de fichiers chrome, vous pouvez obtenir des informations de chemin "plus lisibles" à des fins d'affichage.

Selon ce que vous essayez de faire, vous ne pouvez pas accéder à l'emplacement absolu, mais au moins vous pouvez voir ce qu'il est ...

fileSystem.getDirectory(path, {}, function(dir){ 
    if(dir) console.log('This should return full path: ', dir.getDisplayPath()); 
    var fullpath = dir.getDisplayPath(); 

    //now with this, I can open any file I want via child process :) 

    var child = exec(getCommandLine() + ' ' + fullpath, function (error, stdout, stderr) 
    //....... 
}); 

Plus d'informations here concernant le système de fichiers de chrome.

1

Pas sûr que je l'ai compris thequestion. Vous pouvez user __dirname pour obtenir le répertoire du script que vous exécutez. Voir: https://nodejs.org/docs/latest/api/globals.html#globals_dirname

Et à partir de là, vous pouvez utiliser des chemins relatifs pour référencer d'autres fichiers et dossiers.

exemple de structure de dossier:

/home/filippo/works/test/ 
├── subfolder 
│   └── index.js 
└── test.js 

sous-dossier/index.js:

module.exports = {'folder': __dirname}; 

test.js:

var m = require("./subfolder/"); 

console.log("test.js running in: ", __dirname); 
console.log("m module running in: ", m.folder); 

Exécution du test:

$ node test.js 
test.js running in: /home/filippo/works/test 
m module running in: /home/filippo/works/test/subfolder 

Est-ce ce que vous cherchez?

+0

Vous ne l'avez pas compris :) Le répertoire du script et le dossier auquel je veux accéder sont séparés. Les deux peuvent être n'importe où.Le script est évidemment exécuté à partir du paquet de l'application qui devrait idéalement être dans le dossier Applications où l'autre répertoire est un libre choix. Un utilisateur peut choisir n'importe quel dossier n'importe où sur leur machine. Ce que je veux vraiment faire est d'ouvrir des documents avec les applications par défaut de l'utilisateur, j'ai trouvé une façon de le faire avec exec mais le script shell s'exécute à partir de la racine ... –

+0

Ok désolé. Et vous ne pouvez pas stocker le dossier choisi par l'utilisateur quelque part je suppose. – filippo

+0

Ce n'est pas l'URL complète: il s'agit d'un sandbox. J'ai créé mon dossier dans mon '~/Documents/MyFolder'. Je peux seulement retourner'/Myfolder' –

2

Vous ne pouvez pas accéder au chemin absolu du fichier-répertoire d'un système-tout à partir d'une page Web pour des raisons de sécurité. Même si vous essayez d'accéder à un répertoire de fichiers spécifique à partir d'un script javascript (par exemple), le navigateur vous bloquera immédiatement.

Une solution qui pourrait fonctionner pour vous est de récupérer le fichier que l'utilisateur veut ouvrir avec un simple <input type="file">, de sorte que l'utilisateur peut sélectionner un fichier sans vous donner son chemin absolu, après cela, vous pouvez enregistrer le fichier sur un serveur-hôte, ou même le répertoire local du projet, puis utilisez le chemin distant pour l'ouvrir avec la commande exec.