gpt4 book ai didi

javascript - Node.js 文件系统 - 在添加新文件时读取文件夹中的文件

转载 作者:搜寻专家 更新时间:2023-11-01 00:47:42 26 4
gpt4 key购买 nike

我希望使用 Node.js 读取文件夹中的文件。传入的文件是文本文件,具有给定的名称(例如,“FishText1”)

该文件夹将不断添加新文件,并且这些新文件中的每一个都将始终称为“FishText”+ int。

目前,我只是用它来对文本文件执行任务,在本例中是将其移动到另一个文件夹(稍后在我的项目中,我将通过这些文本文件搜索某些字符串,但会得到稍后再做计划),目前有一些代码可以完美地做到这一点,见下文。[注意,这是从用户“adotout”于 2013 年 7 月 30 日在另一个线程上建议的代码中获取的]

我的问题是,有没有比使用强制“while”循环更好的方法,它会在 processed.js 文件到达其列表末尾时停止 - 即当添加新文本文件时,我想要它们也将被处理,而不必重新运行 processed.js。

额外信息:我知道这不是执行此操作的最优雅的方法,因此也将不胜感激对简化它的任何帮助,因为这正在成为更大项目的一部分。文件本身总是小于 1kb,但是,每小时可能有几千个文件需要处理。要求是“实时”处理它们,而不是等到它们完成后再处理它们。

var fileExist = true;
var fileNumber = 1;

while (fileExist) {

** Not my actual code **
** Work PC is at work and I dont have a local copy **

if __DIR/FishText + fileNumber + .txt
Write __NewDIR/NewText + fileNumber + .xml
fileNumber++
else
error message to console
}

当前结果符合预期 - 我可以将所有文件移动到我的新目标文件夹,但如果在我运行“processor.js”后添加了新文件,那么我必须再次运行它。

因此,我尝试了“Chokidar”方法,但我似乎无法运行任何代码 - 甚至在 Atom(我用来编写代码的 Atom)中也不行。请参阅下面的完整代码,其中省略了目录。

当我运行代码“processor.js”时,命令行只是跳转到一个新行,就好像它已经运行了这个过程,但我没有看到我的代码的输出,我希望看到一些东西,因为我已经有目的地包含一行,用于将文件打印到控制台。

var processedFileNumber = 1;
var chokidar = require('chokidar')
var watcher = chokidar.watch('__DIR', {ignored: /^\./, persistant: true})

watcher
.on('add', function(path) {
const file = readFile ('__DIR/file ' + processedFileNumber + '.txt', 'utf8');
console.log("Print something");
writeFile('__DIR/fileXML ' + processedFileNumber + '.xml', data);
processedFileNumber++;
})
.on('error', function(error) {
console.error('Error Happened', error)
})

最佳答案

“while”解决方案对 CPU 的要求很高,而且相当粗糙。

一种类似但更好的方法是“间隔”方法:

const elaborateFiles = setInteval(() => {

if (thereAreNewFiles()) {
elaborateFile()
}

if (allFileAreElaborated()) {
clearInterval(elaborateFiles)
}
}, 1000)

但我认为在这些情况下,您应该以事件驱动的方法为目标

您可以在此处找到更多信息和一些示例:Watch a folder for changes using node.js, and print file paths when they are changed

在我们的例子中:

var chokidar = require('chokidar')
var watcher = chokidar.watch('file or dir', {ignored: /^\./, persistent: true})

watcher
.on('add', function(path) {
const file = readFile(path)
elaborateFile(file)
})
.on('error', function(error) {
console.error('Error happened', error)
})

编辑:

我认为您对 ignored 选项有疑问。这在我的电脑上完美地工作:

const fs = require('fs')
const chokidar = require('chokidar')
const watcher = chokidar.watch('./folder')

watcher
.on('add', (path) => {
console.log('path', path)
const file = fs.readFileSync(path)
console.log('\nfile')
console.log(file.toString())
})
.on('error', (error) => {
console.error('error', error)
})

关于javascript - Node.js 文件系统 - 在添加新文件时读取文件夹中的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57123377/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com