Articles of file io

Node.JS fs.rename不起作用

在Debian Wheezy上重命名文件不能使用fs.rename或fs.renameSync。 这只发生在从/ tmp /移动到另一个位置的文件中。 报告的错误是:EXDEV,不允许跨设备链接。

node.js fs.writeFile不完全覆盖文件

我有一个长度为X的文件,它被长度为XY的string覆盖。 问题是,该文件仍然保留XY以上的信息,以便与第一个更长的文件一样长。 所以这里是我的testing结果是给我适合: 文件开始为: { "sOption1": "String", "nOption2": 23.5, "sOption3": "String", "bOption3B": true, "anOption4": [ 5, 6, 7 ], "sNewString": "FruitSalad", "bNewBoolean": false, "iNewNumber": 14.2, "anNewArray": [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ], "oNewObject": { "bToBeOrNotToBe": true, "sFinishQuote": "That is the question" } } 将正在写入的数据更改为以下内容: { "sOption1": "String", "nOption2": 23.5, […]

如何使用node.js将二进制数据写入文件?

我正在尝试对canvas的toDataUrl() ,它提供了base64数据。 我想把它存储为一个png 。 我可以从base64获得转换后的二进制数据,但是我不能用NodeJs服务把它写到一个文件中。 如果我直接写入base64数据到文件,所有的数据都可以写入,但是不能成为png对吧? 我想存储要存储的二进制数据。 怎么做? 代码片段: var strData = this.drawingCanvas.getContext().canvas.toDataURL(); var data = strData.replace(/^data:image\/\w+;base64,/, ""); var imgData = this.decode(data); // decode(data) is DEFINED BELOW this.call({filePath:'<path>/image.png', data: imgData}, {method:"writeFile"});` `utf8decode : function (utftext) { var string = ""; var i = 0; var c = c1 = c2 = 0; while ( i […]

如果使用openSync打开文件,如何获取node.js中的文件描述符

我已经注意到openSync可能是个大问题,当你用openSync打开一个文件时,你不会得到文件描述符。 如果使用asynchronous调用打开,则只会将其作为callback的参数。 问题是你必须有文件描述符来closures文件! 还有一些程序员可能想要对文件做一些其他的事情,你也需要文件描述符。 在fs API中,node.js似乎没有提供一种访问fdvariables的方法,如果您打开使用同步调用,则在asynchronous模式下打开时,会返回callback。 这基本上使同步开放对大多数应用程序不可用。 我真的不希望不得不使用asynchronous文件打开和closures在我的发展,如果我可以避免它,有没有办法获得fdvariables我需要在使用同步打开时成功closures文件?

从文件夹外部执行Node.js文件中断文件path

我有一个名为“server.js”的Node.js文件。 在脚本中,我打开一些文件,使用如下所示: var certPem = fs.readFileSync('cert_and_key_dev.pem', encoding='ascii'); 使用bash shell,如果我cd到server.js所在的目录,然后运行命令: [mybashshell] $ node server.js 它工作,我没有错误。 服务器启动并运行。 现在,当我输出server.js文件所在的目录时,再次运行相同的shell命令来启动我的服务器。 它抱怨我的文件path到我的“cert_and_key_dev.pem”被打破。 我并不期待这样的事情发生。 我虽然正在执行的脚本文件中使用的path应该是相对于脚本文件,而不是执行我的bash shell命令的位置。 有任何想法吗?

Node.js v0.10:replace文件中的某些字节而不读取整个文件

我正在做一个文本编辑器和编辑一个文件,我真的需要某种方式来只读取文件中的某些字节,我已经使用fs.createReadStream取得了start和end选项。 我也需要replace文件中的某些字节。 我不知道如何做到这一点。 到目前为止,我提出的最好的解决scheme是使用stream读取文件,然后写入一个新的文件,当我遇到的字节,我正在寻找我写我的新内容,而不是用旧的东西新的东西。 这不是最好的方式,你可能知道。 要编辑4个字节,我正在读取一个巨大的2GB文件,并写入2GB(假设我正在编辑一个2GB文件),效率不高。 达到这个目标的最好方法是什么? 我已经花了两个星期的时间做这个,我也想过使用缓冲区,但缓冲区将整个文件加载到内存中,如果是2GB的文件,那么这个效率再次不高。 你将如何实现replace文件中的某些字节而不读取整个文件,也不需要安装一些具有C ++代码的npm包。 我不希望我的编辑器必须编译C ++代码。 如果这样做不是直截了当的,如何删除文件中的某些字节而不读取整个文件? 如果我能做到这一点,那么我可以删除要replace的字节,并使用fs.write()类的东西来添加我希望它们被replace的字节。 编辑#1: 玩过之后,我发现如果我用r+ open打开一个带有标志r+打开文件,然后用fs.write replace一些东西。 所以如果文本是“Lorem ipsum”,我fs.write “!!!!” 结果将是“!!!! m ipsum”。 如果只有我要写的所有东西都是完美的长度,这将工作得很好。 :/ 我知道在新内容不是完美的长度的情况下该怎么办,但我不知道如何。 :/也许如果有某种“空字节”… 编辑#2: 所以如上所述, fs.open (带有r+ flags选项)+ fs.write允许我覆盖文件中的内容,而不读取整个文件,这太棒了。 现在,我遇到了一个新问题。 我们来看下面的文件: one\n two\n three\n 如果我fs.open在字节0,然后fs.write “是”,我结束了: yes\n two\n three\n 如果我这样做,而不是fs.write “niet”,我最终: niettwo\n three\n 请注意\n字符是如何replace为“t”的,这是因为在fs.open使用r+时, fs.write工作方式是replace字节。 这是我现在要解决的问题。 如何做一些像“从这个字节到这个字节,取代它与这些其他字节”,所以我的function可能是像function replaceBytes(filePath, newBytes, startByte, […]

遇到EOF时如何不停止阅读文件?

我正在尝试为Node.js实现一个例程,它允许打开一个文件,这个文件正在被其他进程附加到这个时候,然后在数据追加到文件时立即返回数据块。 可以认为它与tail -f UNIX命令类似,但是可以在块可用时立即执行,而不是随着时间的推移对轮询进行轮询。 另外,人们可以把它看作像使用套接字一样使用文件 – 期待on('data')不时触发,直到文件被显式closures。 在C语言中,如果我要实现这个function,我只需打开文件,input其文件描述符来select() (或者具有类似名称的任何替代函数),然后只读文件描述符标记为“可读”的块。 所以,当没有什么可读的时候,它就不会被读取,并且当文件附加了一些东西时,它就可以再次读取了。 我有点期待这样的行为在Javascript中的以下代码示例: function readThatFile(filename) { const stream = fs.createReadStream(filename, { flags: 'r', encoding: 'utf8', autoClose: false // I thought this would prevent file closing on EOF too }); stream.on('error', function(err) { // handle error }); stream.on('open', function(fd) { // save fd, so I can close it […]

将文件存储在磁盘或MongoDB上

我正在创build一个mongodb / nodejs博客系统(类似于wordpress)。 我目前有图像被保存在磁盘上,指针被放在mongo中。 我想知道,因为我已经将所有会话存储在MongoDB中,以便在服务器之间实现轻松的负载平衡,将实际的文件存储在Mongo中对于轻松实现多服务器设置和/或提高性能也是一个聪明的想法。 如果一切都存储在一个数据库中,您可以简单地产生更多的Web服务器和/或mongo复制水平伸缩 意见?

NodeJS fs.open在现有文件上失败(不是path问题)

我一直在处理这个很长一段时间,所以任何帮助非常感激。 所以,我正在下载一个文件并使用PhantomJS和CasperJS进行保存。 让我指出这不是问题。 该文件下载没有问题。 问题是,NodeJS在下载后不会识别或打开文件。 我不能fs.stat,fs.open等。没有任何工作。 我将在一秒钟内共享代码,但是这里是日志: Here: bdTcK6hSdownload.csv [ '2puzZMeLdownload.csv', '2s5ICbKNdownload.csv', 'bdTcK6hSdownload.csv', 'izIfagwCdownload.csv' ] fs.js:230 return binding.open(pathModule._makeLong(path), stringToFlags(flags), mode); Error: ENOENT, no such file or directory './caspertemp/bdTcK6hSdownload.csv' at Object.openSync (fs.js:230:18) at Object.processCSV (/Users/Home/dev/node_modules/inviter/index.js:64:29) at /Users/Home/dev/node_modules/inviter/index.js:36:33 at ChildProcess.exithandler (child_process.js:281:7) at ChildProcess.emit (events.js:70:17) at maybeExit (child_process.js:361:16) at Process.onexit (child_process.js:397:5) 正如你所看到的,我正在打印出创build的文件名,然后打印目录的内容,然后尝试打开文件。 如您所见,bdTcK6hSdownload.csv存在于目录中,但在打开时失败。 简单的代码片段在这里: console.log('Here: ' + filename); […]

我可以使用Node.js在“内存”中存储文件吗?

我正在用node.js做一些文件操作工作,我使用的许多软件包需要发​​送一个“path”,以便他们可以打开文件,做一些工作,等等。 但是我正在parsing数百万个文件,而不是实际存储在磁盘上,我想将它们存储在内存中。 这些文件的内容都在我的数据库中,我讨厌把它们写到磁盘上,只是为了对我们做出疯狂的工作。 那么这样的事情是可能的吗?