Javascript 使用NodeJs获取桌面文件图标

Javascript 使用NodeJs获取桌面文件图标,javascript,node.js,electron,fs,Javascript,Node.js,Electron,Fs,我正在尝试在Electron中创建一个桌面启动器应用程序,它读取用户桌面上的文件数,并从找到的每个文件中收集信息。我正在收集文件并基于目录构建路径,但我只能得到文件名。我不知道如何存储文件本身并从中提取桌面图标。除了使用AxtiveXobject之外,我还没有看到很多解决方案,但是据推测某些实现在最新的NodeJ中不起作用。这是到目前为止我的代码 //requiring path and fs modules const path = require('path'); const fs = re

我正在尝试在Electron中创建一个桌面启动器应用程序,它读取用户桌面上的文件数,并从找到的每个文件中收集信息。我正在收集文件并基于目录构建路径,但我只能得到文件名。我不知道如何存储文件本身并从中提取桌面图标。除了使用AxtiveXobject之外,我还没有看到很多解决方案,但是据推测某些实现在最新的NodeJ中不起作用。这是到目前为止我的代码

//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);

为以下内容定义函数:

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

你也可以从中得到灵感。

这里有一段代码,它在电子渲染过程中对我很有用;它已经在macOS和Linux上成功测试过,应该是独立于平台的

它列出位于用户桌面上的所有文件,并在HTML页面末尾显示每个文件的图标和名称;它使用以下Electron API函数:

const{app,nativeImage}=require('electron')。远程;
const path=require('path');
常数fs=要求('fs');
//
const desktopPath=app.getPath(“桌面”);
让filepath=fs.readdirSync(desktopath);
for(让文件路径中的文件路径)
{
app.getFileIcon(文件路径)
.那么
(
(文件图标)=>
{
设div=document.createElement('div');
设img=document.createElement('img');
img.setAttribute('src',fileIcon.toDataURL());
让size=fileIcon.getSize();
img.setAttribute('width',size.width);
img.setAttribute('height',size.height);
儿童分部(img);
div.appendChild(document.createTextNode(“+path.basename(filePath)));
//出于测试目的,将每个文件图标和名称添加到
document.body.appendChild(div);
}
);
}

你可以在帖子中找到一些关于
app.getFileIcon
的有趣提示:

我不知道electron为文件图标内置了函数。我一定要看一下他们的文件。事实上,这是一个比我设法实现的更好的实现。非常感谢。
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);
        }
    );
}