Information:

  • OS: Windows 10
  • Version électronique: dernière
  • Version Electron Builder: dernière

J'essaie de créer une application qui modifie .txt fichiers. Je veux obtenir le chemin du fichier texte lorsqu'il est ouvert avec l'application (c'est-à-dire que l'utilisateur choisit d'ouvrir le .txt avec mon application). J'ai inclus les éléments suivants dans le build de mon package.json:

"fileAssociations": [
    {
        "name": "Text Files",
        "description": "Plain Text File",
        "ext": [
            "txt"
        ]
    }
],

Cela rend l'application ouverte avec le fichier, mais comment obtenir le chemin du fichier qui a été utilisé pour ouvrir l'application. Je sais que je dois faire quelque chose avec un process.argv mais je n'ai aucune idée de comment l'utiliser. J'ai essayé ce qui suit sans succès:

ipcMain.on('get-file-data', function(event) {
    var data = null;
    if (process.platform == 'win32' && process.argv.length >= 2) {
        var openFilePath = process.argv[1];
        console.log(data)
        win.webContents.send('openFile', openFilePath)
    }
});

Comment puis-je obtenir le chemin du fichier?

2
Alex Hawking 27 août 2020 à 08:17

2 réponses

Meilleure réponse

J'ai réussi à obtenir le chemin avec ce qui suit:

const { remote } = require('electron');

console.log(remote.process.argv[1])

Cela renvoie le chemin du fichier utilisé pour ouvrir l'application!

0
Alex Hawking 3 sept. 2020 à 05:28

Ceci est le journal de l'ensemble process. Comme nous pouvons le voir ici, le deuxième argv est le chemin du chemin du fichier d'entrée. Donc process.argv[1] suffira au chemin du fichier. Je ne sais pas pourquoi vous ne pouvez pas trouver de chemin.

Cela vient peut-être de votre écouteur d'événements ipc. Ce qui signifie que le get-file-data n'est pas déclenché correctement.

Comme vous pouvez le voir dans l'image ci-dessous, je montre cette variable de processus dans cette console de navigateur. Voici comment j'ai exposé la variable process au moteur de rendu. Mais c'est juste pour le débogage! Recommandez de ne pas faire cela dans votre production.

preload.js

process.once("loaded", () => {
    window.process = process;
});

main.js

mainWindow = new BrowserWindow({
    width: 1024,
    height: 728,
    minWidth: 800,
    minHeight: 750,
    webPreferences: {
        enableRemoteModule: true,
        preload: path.join(__dirname, "preload.js"),
    }
});

Et vous pouvez utiliser window.process ou process sur votre moteur de rendu

enter image description here

2
tpikachu 31 août 2020 à 11:39