Tag: 文件系统

监视目录中的更改 – 潜在的高内存

我目前在nodeJS中使用一个脚本来监视一个目录(和它的子目录),并且一旦文件被放置在那里,就执行一些function。 实际上,这将是一个FTP,在这里用户上传文件,进行处理,然后删除。 显然,我已经看到脚本的CPU使用量很高,因为它遍历目录,等待文件可见。 但令我担心的是脚本运行的时间越长,内存使用率越高(它只是呈指数级增长)。 有一些轻量级的方法来监视一个目录的变化? 谢谢! 编辑:我目前正在使用手表树 ,这是伟大的,但仍有增加内存的问题。

NodeJS:如何在服务器端观看大量的文件/文件夹进行更新?

我正在开发一个小型的NodeJS应用程序,它基本上用作基于浏览器的桌面search,以便用户可以查询的基于局域网的服务器。 在局域网上的用户都可以访问该服务器上的共享文件夹,传统上习惯于将文件夹放在该文件夹中以便在每个人之间共享,并且我希望保持该过程相同。 我碰到的第一个解决scheme是fs.watchFile ,在其他的stackoverflow问题上已经被触及。 在第一个问题中,用户Ivo Wetzel指出,在linux系统上,fs.watchFile使用inotify,但是认为fs.watchFile不应该用于大量的文件/文件夹。 在关于fs.watchFile的另一个问题中 ,用户tjameson首先重申,在Linux上,inotify将被fs.fileWatch使用,并推荐使用node-inotify-plusplus和node-walk的组合,但是再次声明这种方法不应该用于大量的文件。 有了评论和回应,他build议只查看目录的修改时间,然后重新扫描相关目录以更改文件。 我的最大障碍似乎是,即使有tjameson的build议,受监控文件夹的数量仍然有很大的限制(其中有很多不断增长的文件夹)。 此外,它将不得不做recursion,因为目录树是有点深,也可能会受到更改在较低的分支机构,所以我将不得不在每个文件夹级别监视以下(或者监视修改时间的文件夹,然后扫描以查明发生了什么): 创build文件或子文件夹 删除文件或子文件夹 移动文件或子文件夹 删除自我 自我移动 假设inotify的限制与上面所说的一致,那么当我拥有大量的嵌套子文件夹时,这对我来说似乎可能是太多监视器。 真正的真棒方式看起来像它会涉及kqueue ,我后来发现,作为一个更好的fs.fileWatch在谷歌组讨论的话题。 在我看来很清楚,保持相关文件和文件夹信息的数据库是在事物的查询方面的适当的操作过程,但是保持该数据库与在所关注的目录下的文件系统的实际状态同步将是挑战。 那么社区是怎么想的呢? 有没有一个更好的或众所周知的解决scheme来攻击这个问题,我只是不知道? 最好只是观察所有感兴趣的目录,例如修改时间,然后扫描以查明发生了什么? 观察所有相关的inotify警报并适当地修改数据库是否更好? 这不是像我这样的农民可以解决的问题吗?

在networking驱动器上的appendFile EPERM

应用程序必须将日志数据存储到networking驱动器。 当驱动器在Windows下托pipe时,一切正常。 当驱动器在Mac下托pipe时,读/写是正常的,但附加得到EPERM,所以日志根本不起作用。 代码是相当微不足道的 fs.appendFileSync('xxx.txt', 'zzzzzzzz'); 如何正确追加数据? 该文件通常太大,无法加载到内存中。 更新:读写删除创build是好的! 只有打开与追加失败

Node.js – 文件系统获取文件types

我需要借助node.js来获取文件的文件types来设置内容types。 我知道我可以很容易地检查文件扩展名,但我也有没有扩展名的文件应该有内容types的image/png , text/html ASO。 这是我的代码(我知道它没有多大意义,但这是我需要的基础): var http = require("http"), fs = require("fs"); http.createServer(function(req, res) { var data = ""; try { /* * Do not use this code! * It's not async and it has a security issue. * The code style is also bad. */ data = fs.readFileSync("/home/path/to/folder" + req.url); var type = […]

Node.JS:“fs.watchFile”如何工作?

根据Node 0.4.3的API文档 , fs.watchFile(filename, [options], listener)函数启动一个例程 注意filename变化。 每次访问文件时都会调用callback监听器。 它也说 提供的options应该是一个包含两个成员的对象,一个布尔型, persistent和interval ,一个以毫秒为单位的轮询值 这表明它会根据间隔时间来检查每一个。 但它也说 缺省值是{ persistent: true, interval: 0 } 。 那么这是否意味着它将检查每一毫秒,看文件时间是否改变? 它是否监听操作系统级别的事件? 这是如何运作的?

用Node.js遍历一个目录

我在node.js中有这个代码的问题。 我想recursion地遍历一个目录树,并将callbackaction到树中的每个文件。 这是我目前的代码: var fs = require("fs"); // General function var dive = function (dir, action) { // Assert that it's a function if (typeof action !== "function") action = function (error, file) { }; // Read the directory fs.readdir(dir, function (err, list) { // Return the error if something went wrong if (err) return […]

删除(取消链接)匹配正则expression式的文件

我想从一个目录中删除几个文件,匹配一个正则expression式。 像这样的东西: // WARNING: not real code require('fs').unlink(/script\.\d+\.js$/); 由于unlink不支持正则expression式,我使用它来代替: var fs = require('fs'); fs.readdir('.', (error, files) => { if (error) throw error; files.filter(name => /script\.\d+\.js$/.test(name)).forEach(fs.unlink); }); 哪个起作用,但国际海事组织比它应该更复杂一点。 有一个更好的内置方式来删除匹配正则expression式的文件(甚至只是使用通配符)?

在Javascript中获取文件夹和文件列表的最佳方式

我正在使用node-webkit,并试图让用户select一个文件夹,然后我将返回该文件夹的目录结构并recursion获取其子项。 我已经很简单的使用这个代码(在一个Angular Controller中)。 var fs = require('fs'); $ scope.explorer = []; $ scope.openFile = function(){ $ scope.explorer = [tree_entry($ scope.path)]; get_folder($ scope.path,$ scope.explorer [0] .children); }; 函数get_folder(path,树){ fs.readdir(path,function(err,files){ (err)return console.log(err); files.forEach(function(file,idx){ tree.push(tree_entry(文件)); fs.lstat(path+ '/' +文件,function(ERR,统计数据){ (err)return console.log(err); 如果(stats.isDirectory()){ get_folder(path+ '/' +文件,树[IDX]。儿童); } }); }); }); 的console.log($ scope.explorer); 返回; } 函数tree_entry(entry){ return {label:entry,children:[]} } 以一个中等大小的文件夹与22个子文件夹和大约4级深,需要几分钟来获得整个目录结构。 有什么我明显做错了吗? […]

nodejs – 如何读取和输出jpg图像?

我一直在试图find一个如何读取JPEG图像,然后显示图像的例子。 var http = require('http'), fs = require('fs'); http.createServer(function (req, res) { res.writeHead(200, {'Content-Type': 'text/html'}); fs.readFile('image.jpg', function (err, data) { if (err) throw err; res.write(data); }); res.end(); }).listen(8124, "127.0.0.1"); console.log('Server running at http://127.0.0.1:8124/'); 试了下面的代码,但我认为编码需要设置为当我console.log数据缓冲区对象出现。