真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

node.js文件操作系統(tǒng)的示例分析

這篇文章給大家分享的是有關(guān)node.js文件操作系統(tǒng)的示例分析的內(nèi)容。小編覺(jué)得挺實(shí)用的,因此分享給大家做個(gè)參考,一起跟隨小編過(guò)來(lái)看看吧。

百色ssl適用于網(wǎng)站、小程序/APP、API接口等需要進(jìn)行數(shù)據(jù)傳輸應(yīng)用場(chǎng)景,ssl證書(shū)未來(lái)市場(chǎng)廣闊!成為創(chuàng)新互聯(lián)的ssl證書(shū)銷(xiāo)售渠道,可以享受市場(chǎng)價(jià)格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:13518219792(備注:SSL證書(shū)合作)期待與您的合作!

具體如下:

文件讀取

普通讀取

同步讀取

var fs = require('fs');
var data;
try{
  data = fs.readFileSync('./fileForRead.txt', 'utf8');
  console.log('文件內(nèi)容: ' + data);
}catch(err){
  console.error('讀取文件出錯(cuò): ' + err.message);
}

輸出如下:

/usr/local/bin/node readFileSync.js
文件內(nèi)容: hello world

異步讀取

var fs = require('fs');
fs.readFile('./fileForRead.txt', 'utf8', function(err, data){
  if(err){
    return console.error('讀取文件出錯(cuò): ' + err.message);
  }
  console.log('文件內(nèi)容: ' + data);
});

輸出如下

/usr/local/bin/node readFile.js
文件內(nèi)容: hello world

通過(guò)文件流讀取

適合讀取大文件

var fs = require('fs');
var readStream = fs.createReadStream('./fileForRead.txt', 'utf8');
readStream
  .on('data', function(chunk) {
    console.log('讀取數(shù)據(jù): ' + chunk);
  })
  .on('error', function(err){
    console.log('出錯(cuò): ' + err.message);
  })
  .on('end', function(){ // 沒(méi)有數(shù)據(jù)了
    console.log('沒(méi)有數(shù)據(jù)了');
  })
  .on('close', function(){ // 已經(jīng)關(guān)閉,不會(huì)再有事件拋出
    console.log('已經(jīng)關(guān)閉');
  });

輸出如下

/usr/local/bin/node createReadStream.js
讀取數(shù)據(jù): hello world
沒(méi)有數(shù)據(jù)了
已經(jīng)關(guān)閉

文件寫(xiě)入

備注:以下代碼,如果文件不存在,則創(chuàng)建文件;如果文件存在,則覆蓋文件內(nèi)容;

異步寫(xiě)入

var fs = require('fs');
fs.writeFile('./fileForWrite.txt', 'hello world', 'utf8', function(err){
  if(err) throw err;
  console.log('文件寫(xiě)入成功');
});

同步寫(xiě)入

var fs = require('fs');
try{
  fs.writeFileSync('./fileForWrite1.txt', 'hello world', 'utf8');
  console.log('文件寫(xiě)入成功');
}catch(err){
  throw err;
}

通過(guò)文件流寫(xiě)入

var fs = require('fs');
var writeStream = fs.createWriteStream('./fileForWrite1.txt', 'utf8');
writeStream
  .on('close', function(){ // 已經(jīng)關(guān)閉,不會(huì)再有事件拋出
    console.log('已經(jīng)關(guān)閉');
  });
writeStream.write('hello');
writeStream.write('world');
writeStream.end('');

相對(duì)底層的接口

fs.write(fd, buffer, offset, length[, position], callback) fs.write(fd, data[, position[, encoding]], callback) fs.writeSync(fd, buffer, offset, length[, position]) fs.writeSync(fd, data[, position[, encoding]])

  • fd:寫(xiě)入的文件句柄。

  • buffer:寫(xiě)入的內(nèi)容。

  • offset:將buffer從offset位置開(kāi)始,長(zhǎng)度為length的內(nèi)容寫(xiě)入。

  • length:寫(xiě)入的buffer內(nèi)容的長(zhǎng)度。

  • position:從打開(kāi)文件的position處寫(xiě)入。

  • callback:參數(shù)為 (err, written, buffer)。written表示有xx字節(jié)的buffer被寫(xiě)入。

備注:fs.write(fd, buffer, offset, length[, position], callback)跟fs.write(fd, data[, position[, encoding]], callback)的區(qū)別在于:后面的只能把所有的data寫(xiě)入,而前面的可以寫(xiě)入指定的data子串?

文件是否存在

fs.exists()已經(jīng)是deprecated狀態(tài),現(xiàn)在可以通過(guò)下面代碼判斷文件是否存在。

var fs = require('fs');
fs.access('./fileForRead.txt', function(err){
  if(err) throw err;
  console.log('fileForRead.txt存在');
});
fs.access('./fileForRead2.txt', function(err){
  if(err) throw err;
  console.log('fileForRead2.txt存在');
});

fs.access()除了判斷文件是否存在(默認(rèn)模式),還可以用來(lái)判斷文件的權(quán)限。

備忘:fs.constants.F_OK等常量無(wú)法獲?。╪ode v6.1,mac 10.11.4下,fs.constants是undefined)

創(chuàng)建目錄

異步版本(如果目錄已存在,會(huì)報(bào)錯(cuò))

var fs = require('fs');
fs.mkdir('./hello', function(err){
  if(err) throw err;
  console.log('目錄創(chuàng)建成功');
});

同步版本

var fs = require('fs');
fs.mkdirSync('./hello');

刪除文件

var fs = require('fs');
fs.unlink('./fileForUnlink.txt', function(err){
  if(err) throw err;
  console.log('文件刪除成功');
});
var fs = require('fs');
fs.unlinkSync('./fileForUnlink.txt');

創(chuàng)建目錄

// fs.mkdir(path[, mode], callback)
var fs = require('fs');
fs.mkdir('sub', function(err){
  if(err) throw err;
  console.log('創(chuàng)建目錄成功');
});
// fs.mkdirSync(path[, mode])
var fs = require('fs');
try{
  fs.mkdirSync('hello');
  console.log('創(chuàng)建目錄成功');
}catch(e){
  throw e;
}

遍歷目錄

同步版本,注意:fs.readdirSync()只會(huì)讀一層,所以需要判斷文件類(lèi)型是否目錄,如果是,則進(jìn)行遞歸遍歷。

// fs.readdirSync(path[, options])
var fs = require('fs');
var path = require('path');
var getFilesInDir = function(dir){
  var results = [ path.resolve(dir) ];
  var files = fs.readdirSync(dir, 'utf8');
  files.forEach(function(file){
    file = path.resolve(dir, file);
    var stats = fs.statSync(file);
    if(stats.isFile()){
      results.push(file);
    }else if(stats.isDirectory()){
      results = results.concat( getFilesInDir(file) );
    }
  });
  return results;
};
var files = getFilesInDir('../');
console.log(files);

異步版本:(TODO)

文件重命名

// fs.rename(oldPath, newPath, callback)
var fs = require('fs');
fs.rename('./hello', './world', function(err){
  if(err) throw err;
  console.log('重命名成功');
});
fs.renameSync(oldPath, newPath)
var fs = require('fs');
fs.renameSync('./world', './hello');

監(jiān)聽(tīng)文件修改

fs.watch()比f(wàn)s.watchFile()高效很多(why)

fs.watchFile()

實(shí)現(xiàn)原理:輪詢(xún)。每隔一段時(shí)間檢查文件是否發(fā)生變化。所以在不同平臺(tái)上表現(xiàn)基本是一致的。

var fs = require('fs');
var options = {
  persistent: true, // 默認(rèn)就是true
  interval: 2000 // 多久檢查一次
};
// curr, prev 是被監(jiān)聽(tīng)文件的狀態(tài), fs.Stat實(shí)例
// 可以通過(guò) fs.unwatch() 移除監(jiān)聽(tīng)
fs.watchFile('./fileForWatch.txt', options, function(curr, prev){
  console.log('修改時(shí)間為: ' + curr.mtime);
});

修改fileForWatch.txt,可以看到控制臺(tái)下打印出日志

/usr/local/bin/node watchFile.js
修改時(shí)間為: Sat Jul 16 2016 19:03:57 GMT+0800 (CST)
修改時(shí)間為: Sat Jul 16 2016 19:04:05 GMT+0800 (CST)

為啥子?莫非單純?cè)L問(wèn)文件也會(huì)觸發(fā)回調(diào)?

If you want to be notified when the file was modified, not just accessed, you need to compare curr.mtime and prev.mtime.

在 v0.10 之后的改動(dòng)。如果監(jiān)聽(tīng)的文件不存在,會(huì)怎么處理。如下

Note: when an fs.watchFile operation results in an ENOENT error, it will invoke the listener once, with all the fields zeroed (or, for dates, the Unix Epoch). In Windows, blksize and blocks fields will be undefined, instead of zero. If the file is created later on, the listener will be called again, with the latest stat objects. This is a change in functionality since v0.10.

fs.watch()

fs.watch(filename[, options][, listener]) fs.unwatchFile(filename[, listener])

這接口非常不靠譜(當(dāng)前測(cè)試用的v6.1.0),參考 https://github.com/nodejs/node/issues/7420

fs.watch(filename[, options][, listener])#

注意:fs.watch()這個(gè)接口并不是在所有的平臺(tái)行為都一致,并且在某些情況下是不可用的。recursive這個(gè)選項(xiàng)只在mac、windows下可用。

問(wèn)題來(lái)了:

  1. 不一致的表現(xiàn)。

  2. 不可用的場(chǎng)景。

  3. linux上要recursive咋整。

The fs.watch API is not 100% consistent across platforms, and is unavailable in some situations. The recursive option is only supported on OS X and Windows.

備忘,不可用的場(chǎng)景。比如網(wǎng)絡(luò)文件系統(tǒng)等。

For example, watching files or directories can be unreliable, and in some cases impossible, on network file systems (NFS, SMB, etc), or host file systems when using virtualization software such as Vagrant, Docker, etc.

另外,listener回調(diào)有兩個(gè)參數(shù),分別是event、filename。其中,filename僅在linux、windows上會(huì)提供,并且不是100%提供,所以,盡量不要依賴(lài)filename。

在linux、osx上,fs.watch()監(jiān)聽(tīng)的是inode。如果文件被刪除,并重新創(chuàng)建,那么刪除事件會(huì)觸發(fā)。同時(shí),fs.watch()監(jiān)聽(tīng)的還是最初的inode。(API的設(shè)計(jì)就是這樣的)

結(jié)論:怎么看都感覺(jué)這個(gè)API很不靠譜,雖然性能比f(wàn)s.watchFile()要高很多。

先來(lái)個(gè)例子,在osx下測(cè)試了一下,簡(jiǎn)直令人絕望。。。無(wú)論是創(chuàng)建、修改、刪除文件,evt都是rename。。。

var fs = require('fs');
var options = {
  persistent: true,
  recursive: true,
  encoding: 'utf8'
};
fs.watch('../', options, function(event, filename){
  console.log('觸發(fā)事件:' + event);
  if(filename){
    console.log('文件名是: ' + filename);
  }else{
    console.log('文件名是沒(méi)有提供');
  }
});

修改下fileForWatch.txt,看到下面輸出。。。感覺(jué)打死也不想用這個(gè)API。。。

貼下環(huán)境:osx 10.11.4, node v6.1.0。

觸發(fā)事件:rename
文件名是: fs/fileForWatch.txt___jb_bak___
觸發(fā)事件:rename
文件名是: fs/fileForWatch.txt
觸發(fā)事件:rename
文件名是: fs/fileForWatch.txt___jb_old___
觸發(fā)事件:rename
文件名是: .idea/workspace.xml___jb_bak___
觸發(fā)事件:rename
文件名是: .idea/workspace.xml
觸發(fā)事件:rename
文件名是: .idea/workspace.xml___jb_old___

修改所有者

參考linux命令行,不舉例子了。。。

fs.chown(path, uid, gid, callback) fs.chownSync(path, uid, gid) fs.fchown(fd, uid, gid, callback) fs.fchownSync(fd, uid, gid)

修改權(quán)限

可以用fs.chmod(),也可以用fs.fchmod()。兩者的區(qū)別在于,前面?zhèn)鞯氖俏募窂?,后面?zhèn)鞯牡奈募浔?/p>

  1. fs.chmod)、fs.fchmod()區(qū)別:傳的是文件路徑,還是文件句柄。

  2. fs.chmod()、fs.lchmod()區(qū)別:如果文件是軟連接,那么fs.chmod()修改的是軟連接指向的目標(biāo)文件;fs.lchmod()修改的是軟連接。

fs.chmod(path, mode, callback) fs.chmodSync(path, mode)

fs.fchmod(fd, mode, callback) fs.fchmodSync(fd, mode)

fs.lchmod(path, mode, callback)# fs.lchmodSync(path, mode)

例子:

var fs = require('fs');
fs.chmod('./fileForChown.txt', '777', function(err){
  if(err) console.log(err);
  console.log('權(quán)限修改成功');
});

同步版本:

var fs = require('fs');
fs.chmodSync('./fileForChown.txt', '777');

獲取文件狀態(tài)

區(qū)別:

  • fs.stat() vs fs.fstat():傳文件路徑 vs 文件句柄。

  • fs.stat() vs fs.lstat():如果文件是軟鏈接,那么fs.stat()返回目標(biāo)文件的狀態(tài),fs.lstat()返回軟鏈接本身的狀態(tài)。

fs.stat(path, callback) fs.statSync(path)

fs.fstat(fd, callback) fs.fstatSync(fd)

fs.lstat(path, callback) fs.lstatSync(path)

主要關(guān)注Class: fs.Stats。

首先是方法

  • stats.isFile() -- 是否文件

  • stats.isDirectory() -- 是否目錄

  • stats.isBlockDevice() -- 什么鬼

  • stats.isCharacterDevice() -- 什么鬼

  • stats.isSymbolicLink() (only valid with fs.lstat()) -- 什么鬼

  • stats.isFIFO() -- 什么鬼

  • stats.isSocket() -- 是不是socket文件

官網(wǎng)例子:

{
 dev: 2114,
 ino: 48064969,
 mode: 33188,
 nlink: 1,
 uid: 85,
 gid: 100,
 rdev: 0,
 size: 527,
 blksize: 4096,
 blocks: 8,
 atime: Mon, 10 Oct 2011 23:24:11 GMT, // 訪問(wèn)時(shí)間
 mtime: Mon, 10 Oct 2011 23:24:11 GMT, // 文件內(nèi)容修改時(shí)間
 ctime: Mon, 10 Oct 2011 23:24:11 GMT, // 文件狀態(tài)修改時(shí)間
 birthtime: Mon, 10 Oct 2011 23:24:11 GMT // 創(chuàng)建時(shí)間
}
  • atime:Access Time // 訪問(wèn)時(shí)間

  • mtime:: Modified Time // 文件內(nèi)容修改時(shí)間

  • ctime: Changed Time. // 文件狀態(tài)修改時(shí)間,比如修改文件所有者、修改權(quán)限、重命名等

  • birthtime: Birth Time // 創(chuàng)建時(shí)間。在某些系統(tǒng)上是不可靠的,因?yàn)槟貌坏健?/p>

例子:

var fs = require('fs');
var getTimeDesc = function(d){
  return [d.getFullYear(), d.getMonth()+1, d.getDate()].join('-') + ' ' + [d.getHours(), d.getMinutes(), d.getSeconds()].join(':');
};
fs.stat('./fileForStat.txt', function(err, stats){
  console.log('文件大小: ' + stats.size);
  console.log('創(chuàng)建時(shí)間: ' + getTimeDesc(stats.birthtime));
  console.log('訪問(wèn)時(shí)間: ' + getTimeDesc(stats.atime));
  console.log('修改時(shí)間: ' + getTimeDesc(stats.mtime));
});

輸出如下:

/usr/local/bin/node stat.js
文件大小: 3613
創(chuàng)建時(shí)間: 2016-7-16 12:40:49
訪問(wèn)時(shí)間: 2016-7-16 12:40:49
修改時(shí)間: 2016-7-16 12:40:49

Process finished with exit code 0

同步的例子:

var fs = require('fs');
var getTimeDesc = function(d){
  return [d.getFullYear(), d.getMonth()+1, d.getDate()].join('-') + ' ' + [d.getHours(), d.getMinutes(), d.getSeconds()].join(':');
};
var stats = fs.statSync('./fileForStat.txt');
console.log('文件大小: ' + stats.size);
console.log('創(chuàng)建時(shí)間: ' + getTimeDesc(stats.birthtime));
console.log('訪問(wèn)時(shí)間: ' + getTimeDesc(stats.atime));
console.log('修改時(shí)間: ' + getTimeDesc(stats.mtime));

訪問(wèn)/權(quán)限檢測(cè)

例子:

// fs.access(path[, mode], callback)
var fs = require('fs');
fs.access('./fileForAccess.txt', function(err){
  if(err) throw err;
  console.log('可以訪問(wèn)');
});

同步版本:

// fs.accessSync(path[, mode])
var fs = require('fs');
// 如果成功,則返回undefined,如果失敗,則拋出錯(cuò)誤(什么鬼)
try{
  fs.accessSync('./fileForAccess.txt');
}catch(e){
  throw(e);
}

文件打開(kāi)/關(guān)閉

比較底層的接口,實(shí)際需要用到的機(jī)會(huì)不多。需要用到的時(shí)候看下文檔就行。

  • flags:文件打開(kāi)模式,比如r、r+、w、w+等??蛇x模式非常多。

  • mode:默認(rèn)是666,可讀+可寫(xiě)。

fs.open(path, flags[, mode], callback) fs.openSync(path, flags[, mode]) fs.close(fd, callback) fs.closeSync(fd)

文件讀?。ǖ讓樱?/strong>

相對(duì)底層的讀取接口,參數(shù)如下

  • fd:文件句柄。

  • buffer:將讀取的文件內(nèi)容寫(xiě)到buffer里。

  • offset:buffer開(kāi)始寫(xiě)入的位置。(在offset開(kāi)始寫(xiě)入,還是offset+1?)

  • length:要讀取的字節(jié)數(shù)。

  • position:文件從哪個(gè)位置開(kāi)始讀取。如果是null,那么就從當(dāng)前位置開(kāi)始讀取。(讀取操作會(huì)記錄下上一個(gè)位置)

此外,callback的回調(diào)參數(shù)為(err, bytesRead, buffer)

fs.read(fd, buffer, offset, length, position, callback)

追加文件內(nèi)容

fs.appendFile(file, data[, options], callback)

  • file:可以是文件路徑,也可以是文件句柄。(還可以是buffer?)

  • data:要追加的內(nèi)容。string或者buffer。

  • options

    • encoding:編碼,默認(rèn)是utf8

    • mode:默認(rèn)是0o666

    • flag:默認(rèn)是a

注意:如果file是文件句柄,那么

  • 開(kāi)始追加數(shù)據(jù)前,file需要已經(jīng)打開(kāi)。

  • file需要手動(dòng)關(guān)閉。

var fs = require('fs');
fs.appendFile('./extra/fileForAppend.txt', 'helo', 'utf8', function(err){
  if(err) throw err;
  console.log('append成功');
});

文件內(nèi)容截取

fs.truncate(path, len, callback) fs.truncateSync(path, len)

fs.ftruncate(fd, len, callback) fs.ftruncateSync(fd, len)

用途參考linux說(shuō)明文檔。

要點(diǎn):

  • offset不會(huì)變化。比如通過(guò)fs.read()讀取文件內(nèi)容,就需要特別注意。

  • 如果len小于文件內(nèi)容長(zhǎng)度,剩余文件內(nèi)容部分會(huì)丟失;如果len大于文件內(nèi)容長(zhǎng)度,那么超出的部分,會(huì)用\0進(jìn)行填充。

  • 如果傳的是文件路徑,需要確保文件是可寫(xiě)的;如果傳的是文件句柄,需要確保文件句柄已經(jīng)打開(kāi)并且可寫(xiě)入。

The truncate() and ftruncate() functions cause the regular file named by path or referenced by fd to be truncated to a size of precisely length bytes.

If the file previously was larger than this size, the extra data is lost. If the file previously was shorter, it is extended, and the extended part reads as null bytes ('\0').

The file offset is not changed.

With ftruncate(), the file must be open for writing; with truncate(), the file must be writable.

修改文件屬性(時(shí)間)

  • path/fd:文件路徑/文件句柄

  • atime:Access Time。上一次訪問(wèn)文件數(shù)據(jù)的時(shí)間。

  • mtime:Modified Time。修改時(shí)間。

fs.utimes(path, atime, mtime, callback) fs.utimesSync(path, atime, mtime)

fs.futimes(fd, atime, mtime, callback) fs.futimesSync(fd, atime, mtime)

備注,在命令行下可以

  • 通過(guò)stat查看文件的狀態(tài)信息,包括了上面的atime、mtime。

  • 通過(guò)touch修改這幾個(gè)時(shí)間。

創(chuàng)建文件鏈接

fs.symlink(target, path[, type], callback) fs.symlinkSync(target, path[, type])

fs.link(srcpath, dstpath, callback) fs.linkSync(srcpath, dstpath)

link() creates a new link (also known as a hard link) to an existing file.

軟鏈接、硬鏈接區(qū)別:參考 或者 [這個(gè)]。(https://www.jb51.net/article/96135.htm)

  • 硬鏈接:inode相同,多個(gè)別名。刪除一個(gè)硬鏈接文件,不會(huì)影響其他有相同inode的文件。

  • 軟鏈接:有自己的inode,用戶(hù)數(shù)據(jù)塊存放指向文件的inode。

參考這里。

創(chuàng)建臨時(shí)目錄

fs.mkdtemp(prefix, callback) fs.mkdtempSync(prefix)

備忘:跟普通的隨便找個(gè)目錄,創(chuàng)建個(gè)隨機(jī)名字的文件夾,有什么區(qū)別?

代碼示例如下:

var fs = require('fs');
fs.mkdtemp('/tmp/', function(err, folder){
  if(err) throw err;
  console.log('創(chuàng)建臨時(shí)目錄: ' + folder);
});

輸出如下:

/usr/local/bin/node mkdtemp.js
創(chuàng)建臨時(shí)目錄: /tmp/Cxw51O

找出軟連接指向的真實(shí)路徑

fs.readlink(path[, options], callback) fs.readlinkSync(path[, options])

如下面例子,創(chuàng)建了個(gè)軟鏈接指向fileForReadLink.txt,通過(guò)fs.readlink()就可以找出原始的路徑。

var fs = require('fs');
var randomFileName = './extra/fileForReadLink-' + String(Math.random()).slice(2, 6) + '.txt';
fs.symlinkSync('./extra/fileForReadLink.txt', randomFileName);
fs.readlink(randomFileName, 'utf8', function(err, linkString){
  if(err) throw err;
  console.log('鏈接文件內(nèi)容: ' + linkString);
});

類(lèi)似終端下直接運(yùn)行readlink。對(duì)于軟鏈接文件,效果同上面代碼。對(duì)于硬鏈接,沒(méi)有輸出。

?  extra git:(master) ? readlink fileForReadLink-9827.txt
./extra/fileForReadLink.txt
?  extra git:(master) ? readlink fileForLinkHard.txt
?  extra git:(master) ? readlink fileForLinkSoft.txt
./extra/fileForLink.txt

真實(shí)路徑

fs.realpath(path[, options], callback) fs.realpathSync(path[, options])

例子:(不能作用于軟鏈接?)

var fs = require('fs');
var path = require('path');
// fileForRealPath2.txt 是普通文件,正常運(yùn)行
fs.realpath('./extra/inner/fileForRealPath2.txt', function(err, resolvedPath){
  if(err) throw err;
  console.log('fs.realpath: ' + resolvedPath);
});
// fileForRealPath.txt 是軟鏈接, 會(huì)報(bào)錯(cuò),提示找不到文件
fs.realpath('./extra/inner/fileForRealPath.txt', function(err, resolvedPath){
  if(err) throw err;
  console.log('fs.realpath: ' + resolvedPath);
});
console.log( 'path.resolve: ' + path.resolve('./extra/inner/fileForRealpath.txt') );

輸出如下:

path.resolve: /Users/a/Documents/git-code/git-blog/demo/2015.05.21-node-basic/fs/extra/inner/fileForRealpath.txt
fs.realpath: /Users/a/Documents/git-code/git-blog/demo/2015.05.21-node-basic/fs/extra/inner/fileForRealPath2.txt
/Users/a/Documents/git-code/git-blog/demo/2015.05.21-node-basic/fs/realpath.js:12
    if(err) throw err;
            ^
Error: ENOENT: no such file or directory, realpath './extra/inner/fileForRealPath.txt'
    at Error (native)
Process finished with exit code 1

刪除目錄

fs.rmdir(path, callback) fs.rmdirSync(path)

例子如下:

var fs = require('fs');
fs.rmdir('./dirForRemove', function(err){
  if(err) throw err;
  console.log('目錄刪除成功');
});

不常用

緩沖區(qū)內(nèi)容寫(xiě)到磁盤(pán)

fs.fdatasync(fd, callback) fs.fdatasyncSync(fd)

可以參考這里:

1、sync函數(shù) sync函數(shù)只是將所有修改過(guò)的塊緩沖區(qū)排入寫(xiě)隊(duì)列,然后就返回,它并不等待實(shí)際寫(xiě)磁盤(pán)操作結(jié)束。 通常稱(chēng)為update的系統(tǒng)守護(hù)進(jìn)程會(huì)周期性地(一般每隔30秒)調(diào)用sync函數(shù)。這就保證了定期沖洗內(nèi)核的塊緩沖區(qū)。命令sync(1)也調(diào)用sync函數(shù)。
2、fsync函數(shù) fsync函數(shù)只對(duì)由文件描述符filedes指定的單一文件起作用,并且等待寫(xiě)磁盤(pán)操作結(jié)束,然后返回。 fsync可用于數(shù)據(jù)庫(kù)這樣的應(yīng)用程序,這種應(yīng)用程序需要確保將修改過(guò)的塊立即寫(xiě)到磁盤(pán)上。
3、fdatasync函數(shù) fdatasync函數(shù)類(lèi)似于fsync,但它只影響文件的數(shù)據(jù)部分。而除數(shù)據(jù)外,fsync還會(huì)同步更新文件的屬性。 對(duì)于提供事務(wù)支持的數(shù)據(jù)庫(kù),在事務(wù)提交時(shí),都要確保事務(wù)日志(包含該事務(wù)所有的修改操作以及一個(gè)提交記錄)完全寫(xiě)到硬盤(pán)上,才認(rèn)定事務(wù)提交成功并返回給應(yīng)用層。

待確認(rèn)

  1. 通篇的mode,待確認(rèn)。

  2. fs.access()更多用法(涉及 fs.constants.F_OK等權(quán)限)

感謝各位的閱讀!關(guān)于“node.js文件操作系統(tǒng)的示例分析”這篇文章就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,讓大家可以學(xué)到更多知識(shí),如果覺(jué)得文章不錯(cuò),可以把它分享出去讓更多的人看到吧!


文章題目:node.js文件操作系統(tǒng)的示例分析
文章源于:http://weahome.cn/article/jsepeh.html

其他資訊

在線咨詢(xún)

微信咨詢(xún)

電話咨詢(xún)

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部