使用NodeJs获取桌面文件图标

问题描述 投票:0回答:1

我试图在Electron中创建一个桌面启动程序,读取用户桌面中的文件数量,并从每个找到的文件中收集信息。我正在收集文件并根据目录构造路径,但我能得到的只是文件名。我不知道如何存储文件本身并从中提取桌面图标。我没有看到很多解决方法,除了使用AxtiveXobject然而据说某些实现在最新的nodejs中不能工作。这是我目前的代码。

//requiring path and fs modules
const path = require('path');
const fs = require('fs');
//gets home directory
const homedir = require('os').homedir();
//specifies to desktop
const dir = `${homedir}/Desktop`;
var walk = require('walk');
var filepaths = [];
//storing desktop path
var desktopDir = dir;
console.log(desktopDir);
//gets the desktop files and paths
function getDesktopFiles(_dir){
    //read directory
    fs.readdir(_dir, (err, files) => { 
        if (err) 
          console.log(err); 
        else { 
            files.forEach(_file => { 
            //console.log(_file); 
            let _p = _dir + '/'+_file;
            //changes slashing for file paths
            let _path = _p.replace(/\\/g, "/");
            filepaths.push(_path);

          }) 
        } 
    }) 
    for(let p of filepaths){
        console.log(p);
    }

}

getDesktopFiles(desktopDir);
javascript node.js electron fs
1个回答
0
投票

定义一个函数为相同的。

function load(icon) {
  if (cache[icon]) return cache[icon];
  return cache[icon] = fs.readFileSync(__dirname + '/public/icons/' + icon, 'base64');
}

这里 你可以得到同样的灵感。


0
投票

下面是一段快速的代码,它在Electron渲染器过程中为我工作;它已经在macOS和Linux上成功地进行了测试,应该是独立于平台的。

它列出了用户桌面上的所有文件,并在HTML页面的最后显示每个文件的图标和名称;它使用了以下Electron API函数。

const { app, nativeImage } = require ('electron').remote;
const path = require ('path');
const fs = require ('fs');
//
const desktopPath = app.getPath ('desktop');
let filePaths = fs.readdirSync (desktopPath);
for (let filePath of filePaths)
{
    app.getFileIcon (filePath)
    .then
    (
        (fileIcon) =>
        {
            let div = document.createElement ('div');
            let img = document.createElement ('img');
            img.setAttribute ('src', fileIcon.toDataURL ());
            let size = fileIcon.getSize ();
            img.setAttribute ('width', size.width);
            img.setAttribute ('height', size.height);
            div.appendChild (img);
            div.appendChild (document.createTextNode (" " + path.basename (filePath)));
            // For test purposes, add each file icon and name to the end of <body>
            document.body.appendChild (div);
        }
    );
}

你可能会发现一些有趣的提示,关于 app.getFileIcon 的帖子中。有没有一个标准的方法让Electron或Node.js应用访问系统级图标?

© www.soinside.com 2019 - 2024. All rights reserved.