{ "source": "doc-ko/api/fs.markdown", "modules": [ { "textRaw": "File System", "name": "fs", "stability": 3, "stabilityText": "Stable", "desc": "
파일 I/O는 표준 POSIX 함수의 랩퍼(wrapper)로 제공된다. 이 모듈을 사용하려면\nrequire('fs')
를 사용해라. 모든 함수는 비동기 방식과 동기방식이 있다.\n\n
비동기 방식은 항상 마지막 파라미터로 완료 콜백함수를 받는다. 완료 콜백에 전달되는 함수는\n메서드에 따라 다르지만 첫 아규먼트는 항상 예외로 사용한다. 작업이 성공적으로 완료되면\n첫 아규먼트는 null
이나 undefined
가 될 것이다.\n\n
동기형식을 사용할 때는 모든 예외가 즉시 던져진다. try/catch를 사용해서 예외를\n다루거나 위로 버블링할 수 있다.\n\n
\n다음은 비동기 버전의 예제다.\n\n
\nvar fs = require('fs');\n\nfs.unlink('/tmp/hello', function (err) {\n if (err) throw err;\n console.log('successfully deleted /tmp/hello');\n});
\n다음은 동기버전이다.\n\n
\nvar fs = require('fs');\n\nfs.unlinkSync('/tmp/hello')\nconsole.log('successfully deleted /tmp/hello');
\n비동기 메서드를 사용할 때는 순서대로 실행된다는 보장을 하지 않는다. 그래서 다음\n예제는 오류가 날 수 있다.\n\n
\nfs.rename('/tmp/hello', '/tmp/world', function (err) {\n if (err) throw err;\n console.log('renamed complete');\n});\nfs.stat('/tmp/world', function (err, stats) {\n if (err) throw err;\n console.log('stats: ' + JSON.stringify(stats));\n});
\nfs.stat가
fs.rename`보다 먼저 실행될 수 있다.\n이에 대한 올바른 방법은 콜백 체인으로 연결하는 것이다.\n\n
fs.rename('/tmp/hello', '/tmp/world', function (err) {\n if (err) throw err;\n fs.stat('/tmp/world', function (err, stats) {\n if (err) throw err;\n console.log('stats: ' + JSON.stringify(stats));\n });\n});
\n프로세스가 바쁜 경우 프로그래머는 이러한 호출을 비동기 방식으로 사용하기를\n강력히 추천한다. 동기방식은 모든 연결을 멈추고 작업이 완료될 때까지\n전체 프로세스를 블락킹할 것이다.\n\n
\n파일명에 상대경로를 사용할 수 있지만 이 상대 경로는 process.cwd()
이 대한\n상대경로가 될 것이다.\n\n
대부분의 fs함수는 callback인자를 생략할 수 있게 한다. callback인자를 생략하면 오류를 다시\n던지는 기본 콜백을 사용한다. 원래 호출했던 지점을 추적하려면 NODE_DEBUG 환경변수를 설정해라.\n\n
\n$ cat script.js\nfunction bad() {\n require('fs').readFile('/');\n}\nbad();\n\n$ env NODE_DEBUG=fs node script.js\nfs.js:66\n throw err;\n ^\nError: EISDIR, read\n at rethrow (fs.js:61:21)\n at maybeCallback (fs.js:79:42)\n at Object.fs.readFile (fs.js:153:18)\n at bad (/path/to/script.js:2:17)\n at Object.<anonymous> (/path/to/script.js:5:1)\n <etc.>
\n",
"methods": [
{
"textRaw": "fs.rename(oldPath, newPath, [callback])",
"type": "method",
"name": "rename",
"desc": "비동기 rename(2). 전달한 완료콜백에는 예외 아규먼트 외에 다른 아규먼트는 없다.\n\n
\n", "signatures": [ { "params": [ { "name": "oldPath" }, { "name": "newPath" }, { "name": "callback", "optional": true } ] } ] }, { "textRaw": "fs.renameSync(oldPath, newPath)", "type": "method", "name": "renameSync", "desc": "동기 rename(2).\n\n
\n", "signatures": [ { "params": [ { "name": "oldPath" }, { "name": "newPath" } ] } ] }, { "textRaw": "fs.ftruncate(fd, len, [callback])", "type": "method", "name": "ftruncate", "desc": "동기 ftruncate(2). 전달한 완료콜백에는 예외 아규먼트 외에 다른 아규먼트는 없다.\n\n
\n", "signatures": [ { "params": [ { "name": "fd" }, { "name": "len" }, { "name": "callback", "optional": true } ] } ] }, { "textRaw": "fs.ftruncateSync(fd, len)", "type": "method", "name": "ftruncateSync", "desc": "동기 ftruncate(2).\n\n
\n", "signatures": [ { "params": [ { "name": "fd" }, { "name": "len" } ] } ] }, { "textRaw": "fs.truncate(path, len, [callback])", "type": "method", "name": "truncate", "desc": "비동기 truncate(2). 발생할 수 있는 오류인자 외에 완료 콜백에 전달되는 인자는 없다.\n\n
\n", "signatures": [ { "params": [ { "name": "path" }, { "name": "len" }, { "name": "callback", "optional": true } ] } ] }, { "textRaw": "fs.truncateSync(path, len)", "type": "method", "name": "truncateSync", "desc": "동기 truncate(2).\n\n
\n", "signatures": [ { "params": [ { "name": "path" }, { "name": "len" } ] } ] }, { "textRaw": "fs.chown(path, uid, gid, [callback])", "type": "method", "name": "chown", "desc": "비동기 chown(2). 전달한 완료콜백에는 예외 아규먼트 외에 다른 아규먼트는 없다.\n\n
\n", "signatures": [ { "params": [ { "name": "path" }, { "name": "uid" }, { "name": "gid" }, { "name": "callback", "optional": true } ] } ] }, { "textRaw": "fs.chownSync(path, uid, gid)", "type": "method", "name": "chownSync", "desc": "동기 chown(2).\n\n
\n", "signatures": [ { "params": [ { "name": "path" }, { "name": "uid" }, { "name": "gid" } ] } ] }, { "textRaw": "fs.fchown(fd, uid, gid, [callback])", "type": "method", "name": "fchown", "desc": "비동기 fchown(2). 전달한 완료콜백에는 예외 아규먼트 외에 다른 아규먼트는 없다.\n\n
\n", "signatures": [ { "params": [ { "name": "fd" }, { "name": "uid" }, { "name": "gid" }, { "name": "callback", "optional": true } ] } ] }, { "textRaw": "fs.fchownSync(fd, uid, gid)", "type": "method", "name": "fchownSync", "desc": "동기 fchown(2).\n\n
\n", "signatures": [ { "params": [ { "name": "fd" }, { "name": "uid" }, { "name": "gid" } ] } ] }, { "textRaw": "fs.lchown(path, uid, gid, [callback])", "type": "method", "name": "lchown", "desc": "비동기 lchown(2). 전달한 완료콜백에는 예외 아규먼트 외에 다른 아규먼트는 없다.\n\n
\n", "signatures": [ { "params": [ { "name": "path" }, { "name": "uid" }, { "name": "gid" }, { "name": "callback", "optional": true } ] } ] }, { "textRaw": "fs.lchownSync(path, uid, gid)", "type": "method", "name": "lchownSync", "desc": "동기 lchown(2).\n\n
\n", "signatures": [ { "params": [ { "name": "path" }, { "name": "uid" }, { "name": "gid" } ] } ] }, { "textRaw": "fs.chmod(path, mode, [callback])", "type": "method", "name": "chmod", "desc": "비동기 chmod(2). 전달한 완료콜백에는 예외 아규먼트 외에 다른 아규먼트는 없다.\n\n
\n", "signatures": [ { "params": [ { "name": "path" }, { "name": "mode" }, { "name": "callback", "optional": true } ] } ] }, { "textRaw": "fs.chmodSync(path, mode)", "type": "method", "name": "chmodSync", "desc": "동기 chmod(2).\n\n
\n", "signatures": [ { "params": [ { "name": "path" }, { "name": "mode" } ] } ] }, { "textRaw": "fs.fchmod(fd, mode, [callback])", "type": "method", "name": "fchmod", "desc": "비동기 fchmod(2). 전달한 완료콜백에는 예외 아규먼트 외에 다른 아규먼트는 없다.\n\n
\n", "signatures": [ { "params": [ { "name": "fd" }, { "name": "mode" }, { "name": "callback", "optional": true } ] } ] }, { "textRaw": "fs.fchmodSync(fd, mode)", "type": "method", "name": "fchmodSync", "desc": "동기 fchmod(2).\n\n
\n", "signatures": [ { "params": [ { "name": "fd" }, { "name": "mode" } ] } ] }, { "textRaw": "fs.lchmod(path, mode, [callback])", "type": "method", "name": "lchmod", "desc": "비동기 lchmod(2). 전달한 완료콜백에는 예외 아규먼트 외에 다른 아규먼트는 없다.\n\n
\nMac OS X에서만 사용할 수 있다.\n\n
\n", "signatures": [ { "params": [ { "name": "path" }, { "name": "mode" }, { "name": "callback", "optional": true } ] } ] }, { "textRaw": "fs.lchmodSync(path, mode)", "type": "method", "name": "lchmodSync", "desc": "동기 lchmod(2).\n\n
\n", "signatures": [ { "params": [ { "name": "path" }, { "name": "mode" } ] } ] }, { "textRaw": "fs.stat(path, [callback])", "type": "method", "name": "stat", "desc": "비동기 stat(2). 콜백은 두 아규먼트 (err, stats)
를 받고 stats
은\nfs.Stats 객체이다. 더 자세한 내용은 아래의\nfs.Stats부분을 봐라.\n\n
동기 lstat(2). 콜백은 두 아규먼트 (err, stats)
를 받고 stats
은 fs.Stats
객체다.\nlstat()
은 path
가 심볼릭 링크일 경우 참조하는 파일이 아닌 심볼릭 링크 자체의 상태라는\n점만 빼면 stat()
와 같다.\n\n
비동기 fstat(2). 콜백은 두 아규먼트 (err, stats)
를 받고 stats
은 fs.Stats
객체다.\nfstat()
은 상태를 확인하는 파일이 파일 디스크립터 fd
가 지정한 파일이라는 점만 빼면\nstat()
와 같다.\n\n
동기 stat(2). fs.Stats
인스턴스를 반환한다.\n\n
동기 lstat(2). fs.Stats
인스턴스를 반환한다.\n\n
동기 fstat(2). fs.Stats
인스턴스를 반환한다.\n\n
비동기 link(2). 전달한 완료콜백에는 예외 아규먼트 외에 다른 아규먼트는 없다.\n\n
\n", "signatures": [ { "params": [ { "name": "srcpath" }, { "name": "dstpath" }, { "name": "callback", "optional": true } ] } ] }, { "textRaw": "fs.linkSync(srcpath, dstpath)", "type": "method", "name": "linkSync", "desc": "동기 link(2).\n\n
\n", "signatures": [ { "params": [ { "name": "srcpath" }, { "name": "dstpath" } ] } ] }, { "textRaw": "fs.symlink(srcpath, dstpath, [type], [callback])", "type": "method", "name": "symlink", "desc": "비동기 symlink(2). 전달한 완료콜백에는 예외 아규먼트 외에 다른 아규먼트는 없다.\ntype
아규먼트는 'dir'
이나 'file'
, 'junction'
이 가능하다.(기본값은 'file'
이다) 이 옵션은\n윈도우에서만 사용된다.(다른 플랫폼에서는 무시한다.)\nWindows의 junction에서는 목적지경로가 절대경로여야 한다. 'junction'
을 사용하면 destination
\n아규먼트를 절대경로로 자동으로 정규화한다.\n\n
동기 symlink(2).\n\n
\n", "signatures": [ { "params": [ { "name": "srcpath" }, { "name": "dstpath" }, { "name": "type", "optional": true } ] } ] }, { "textRaw": "fs.readlink(path, [callback])", "type": "method", "name": "readlink", "desc": "비동기 readlink(2). 콜백은 두 아규먼트 (err, linkString)
를 받는다.\n\n
동기 readlink(2). 심볼릭 링크의 문자열 값을 반환한다.\n\n
\n", "signatures": [ { "params": [ { "name": "path" } ] } ] }, { "textRaw": "fs.realpath(path, [cache], callback)", "type": "method", "name": "realpath", "desc": "비동기 realpath(2). callback
은 두 개의 아규먼트 (err, resolvedPath)
를 받는다.\n상대경로를 처리하려면 process.cwd
를 사용해야 할 것이다. cache
는 실제 경로를 알기\n위해 지정한 경로 처리를 강제하거나 추가적인 fs.stat
호출을 피하기 위해 사용할 수 있는\n매핑된 경로의 객체리터럴이다.\n\n
예제:\n\n
\nvar cache = {'/etc':'/private/etc'};\nfs.realpath('/etc/passwd', cache, function (err, resolvedPath) {\n if (err) throw err;\n console.log(resolvedPath);\n});
\n",
"signatures": [
{
"params": [
{
"name": "path"
},
{
"name": "cache",
"optional": true
},
{
"name": "callback"
}
]
}
]
},
{
"textRaw": "fs.realpathSync(path, [cache])",
"type": "method",
"name": "realpathSync",
"desc": "동기 realpath(2). 처리된 경로를 반환한다.\n\n
\n", "signatures": [ { "params": [ { "name": "path" }, { "name": "cache", "optional": true } ] } ] }, { "textRaw": "fs.unlink(path, [callback])", "type": "method", "name": "unlink", "desc": "비동기 unlink(2). 전달한 완료콜백에는 예외 아규먼트 외에 다른 아규먼트는 없다.\n\n
\n", "signatures": [ { "params": [ { "name": "path" }, { "name": "callback", "optional": true } ] } ] }, { "textRaw": "fs.unlinkSync(path)", "type": "method", "name": "unlinkSync", "desc": "동기 unlink(2).\n\n
\n", "signatures": [ { "params": [ { "name": "path" } ] } ] }, { "textRaw": "fs.rmdir(path, [callback])", "type": "method", "name": "rmdir", "desc": "비동기 rmdir(2). 전달한 완료콜백에는 예외 아규먼트 외에 다른 아규먼트는 없다.\n\n
\n", "signatures": [ { "params": [ { "name": "path" }, { "name": "callback", "optional": true } ] } ] }, { "textRaw": "fs.rmdirSync(path)", "type": "method", "name": "rmdirSync", "desc": "동기 rmdir(2).\n\n
\n", "signatures": [ { "params": [ { "name": "path" } ] } ] }, { "textRaw": "fs.mkdir(path, [mode], [callback])", "type": "method", "name": "mkdir", "desc": "비동기 mkdir(2). 전달한 완료콜백에는 예외 아규먼트 외에 다른 아규먼트는 없다.\nmode
의 기본값은 0777
이다.\n\n
동기 mkdir(2).\n\n
\n", "signatures": [ { "params": [ { "name": "path" }, { "name": "mode", "optional": true } ] } ] }, { "textRaw": "fs.readdir(path, [callback])", "type": "method", "name": "readdir", "desc": "비동기 readdir(3). 디렉토리의 내용을 읽는다.\n콜백은 두 아규먼트 (err, files)
를 받고 files
는 디렉토리에서 '.'
와 '..'
를\n제외한 파일명들의 배열이다.\n\n
동기 readdir(3). '.'
와 '..'
를 제외한 파일명들의 배열을 반환한다.\n\n
비동기 close(2). 전달한 완료콜백에는 예외 아규먼트 외에 다른 아규먼트는 없다.\n\n
\n", "signatures": [ { "params": [ { "name": "fd" }, { "name": "callback", "optional": true } ] } ] }, { "textRaw": "fs.closeSync(fd)", "type": "method", "name": "closeSync", "desc": "동기 close(2).\n\n
\n", "signatures": [ { "params": [ { "name": "fd" } ] } ] }, { "textRaw": "fs.open(path, flags, [mode], [callback])", "type": "method", "name": "open", "desc": "비동기 파일 열기. open(2).를 봐라. flags
는 다음의 값이 될 수 있다.\n\n
'r'
- 읽기모드로 파일을 연다.\n파일이 존재하지 않으면 예외가 발생한다.
'r+'
- 읽기와 쓰기모드로 파일을 연다.\n(파일이 존재하지 않으면) 파일을 생성하거나 (파일이 존재하면) 새로 쓴다.
'rs'
- 동기방식으로 읽는 파일을 연다. 운영체제가 로컬 파일시스템 캐시를 우회하도록\n한다.
오래됐을 수도 있는 로컬 캐시를 무시하고 NFS 마운트에서 파일을 열 때 주고 유용하다.\n이 모드는 I/O 성능에 실제로 큰 영향을 주기 때문에 필요한 경우가 아니면 사용하지 말아야\n한다.
\n이 모드는 fs.open()
를 동기적인 블락킹 호출로 바꾸지 않는다.\n동기적인 블락킹 호출이 필요하다면 fs.openSync()
를 사용해야 한다.
'rs+'
- 운영체제가 동기방식으로 일기와 쓰기모드로 파일을 열도록 한다. 이 모드를\n사용할 때의 주의점은 'rs'
를 봐라.
'w'
- 쓰기모드로 파일을 연다.\n(파일이 존재하지 않으면) 파일을 생성하거나 (파일이 존재하면) 새로 쓴다.
'wx'
- 'w'
와 비슷하지만 독점 모드로 파일을 연다.
'w+'
- 읽기와 쓰기모드로 파일을 연다.\n(파일이 존재하지 않으면) 파일을 생성하거나 (파일이 존재하면) 새로 쓴다.
'a'
- 추가모드로 파일을 연다.\n파일이 존재하지 않으면 예외가 발생한다.
'ax'
- 'a'
와 비슷하지만 독점 모드로 파일을 연다.
'a+'
- 읽기와 추가모드로 파일을 연다.\n파일이 존재하지 않으면 예외가 발생한다.
'ax+'
- 'a+'
와 비슷하지만 독점 모드로 파일을 연다.
mode
와 기본값은 0666
이다. 콜백은 두 아규먼트 (err, fd)
를 받는다.\n\n
독점 모드(O_EXCL
)는 새로 path
를 생성한다는 것을 보장한다. 해당 파일명이 이미\n존재하는 경우 fs.open()
는 실패한다. POSIX 시스템에서 심볼릭링크는 포함되지 않는다.\n네트워크 파일 시스템에서 독점 모드는 동작할 수도 있고 동작하지 않을 수도 있다.\n\n
동기 open(2).\n\n
\n", "signatures": [ { "params": [ { "name": "path" }, { "name": "flags" }, { "name": "mode", "optional": true } ] } ] }, { "textRaw": "fs.utimes(path, atime, mtime, [callback])", "type": "method", "name": "utimes", "desc": "전달한 경로가 참조하는 파일의 타임스탬프를 변경한다.\n\n
\n", "signatures": [ { "params": [ { "name": "path" }, { "name": "atime" }, { "name": "mtime" } ] }, { "params": [ { "name": "path" }, { "name": "atime" }, { "name": "mtime" }, { "name": "callback", "optional": true } ] } ] }, { "textRaw": "fs.utimesSync(path, atime, mtime)", "type": "method", "name": "utimesSync", "desc": "전달한 경로가 참조하는 파일의 타임스탬프를 변경한다.\n\n
\n", "signatures": [ { "params": [ { "name": "path" }, { "name": "atime" }, { "name": "mtime" } ] } ] }, { "textRaw": "fs.futimes(fd, atime, mtime, [callback])", "type": "method", "name": "futimes", "desc": "전달한 파일 디스크립터가 참조하는 파일의 타임스탬프를 변경한다.\n\n
\n", "signatures": [ { "params": [ { "name": "fd" }, { "name": "atime" }, { "name": "mtime" } ] }, { "params": [ { "name": "fd" }, { "name": "atime" }, { "name": "mtime" }, { "name": "callback", "optional": true } ] } ] }, { "textRaw": "fs.futimesSync(fd, atime, mtime)", "type": "method", "name": "futimesSync", "desc": "전달한 파일 디스크립터가 참조하는 파일의 타임스탬프를 변경한다.\n\n
\n", "signatures": [ { "params": [ { "name": "fd" }, { "name": "atime" }, { "name": "mtime" } ] } ] }, { "textRaw": "fs.fsync(fd, [callback])", "type": "method", "name": "fsync", "desc": "비동기 fsync(2). 전달한 완료콜백에는 예외 아규먼트 외에 다른 아규먼트는 없다.\n\n
\n", "signatures": [ { "params": [ { "name": "fd" }, { "name": "callback", "optional": true } ] } ] }, { "textRaw": "fs.fsyncSync(fd)", "type": "method", "name": "fsyncSync", "desc": "동기 fsync(2).\n\n
\n", "signatures": [ { "params": [ { "name": "fd" } ] } ] }, { "textRaw": "fs.write(fd, buffer, offset, length, position, [callback])", "type": "method", "name": "write", "desc": "fd
가 지정한 파일에 buffer
를 작성한다.\n\n
offset
과 length
는 작성할 버퍼의 부분을 결정한다.\n\n
position
은 이 데이터를 작성해야할 파일의 시작 위치부터의 오프셋을 참조한다. position
이\nnull
이면 데이터는 현재 위치에 작성할 것이다.\npwrite(2)를 봐라.\n\n
콜백은 세 아규먼트 (err, written, buffer)
를 받고 written
는 buffer
에서\n얼마나 많은 바이트가 작성되었는 지를 가리킨다.\n\n
콜백을 기다리지 않고 같은 파일에 여러번 fs.write
를 사용하는 것은 안전하지 않다. 이 경우에\nfs.createWriteStream
를 사용하기를 강력하게 추천한다.\n\n
fs.write()
의 동기 버전. 작성한 바이트 수를 반환한다.\n\n
fd
가 지정한 파일에서 데이터를 읽는다.\n\n
buffer
는 데이터가 작성될 버퍼이다.\n\n
offset
은 버퍼내에서 읽기 시작할 오프셋이다.\n\n
length
는 읽어들일 바이트 수를 지정하는 정수이다.\n\n
position
은 파일에서 읽어들이기 시작하는 위치를 지정하는 정수이다.\nposition
가 null
이면 데이터는 파일의 현재 위치에서 읽을 것이다.\n\n
콜백은 세 아규먼트 (err, bytesRead, buffer)
를 받는다.\n\n
fs.read
의 동기 버전이다. bytesRead
의 수를 반환한다.\n\n
파일의 전체 내용을 비동기로 읽는다. 예제:\n\n
\nfs.readFile('/etc/passwd', function (err, data) {\n if (err) throw err;\n console.log(data);\n});
\n콜백에는 두 아규먼트 (err, data)
를 전달하고 data
는 파일의 내용이다.\n\n
인코딩을 지정하지 않으면 로우(raw) 버퍼를 반환한다.\n\n\n
\n" }, { "textRaw": "fs.readFileSync(filename, [options])", "type": "method", "name": "readFileSync", "desc": "fs.readFile
의 동기버전이다. filename
의 내용을 반환한다.\n\n
encoding
옵션을 지정하면 이 함수는 문자열을 반환하고 encoding
을 지정하지 않으면\n버퍼를 반환한다.\n\n\n
비동기로 파일에 데이터를 작성하고 파일이 이미 존재하는 경우에는 파일을 대체한다.\ndata
는 문자열이나 버퍼가 될 수 있다.\n\n
data
가 버퍼일 경우 encoding
옵션은 무시한다. encoding
의\n기본값은 'utf8'
이다.\n\n
예제:\n\n
\nfs.writeFile('message.txt', 'Hello Node', function (err) {\n if (err) throw err;\n console.log('It\\'s saved!');\n});
\n"
},
{
"textRaw": "fs.writeFileSync(filename, data, [options])",
"type": "method",
"name": "writeFileSync",
"desc": "fs.writeFile
의 동기버전이다.\n\n
비동기로 파일에 데이터를 추가하고 파일이 존재하지 않는 경우 파일을 생성한다.\ndata
는 문자열이거나 버퍼다.\n\n
예제:\n\n
\nfs.appendFile('message.txt', 'data to append', function (err) {\n if (err) throw err;\n console.log('The "data to append" was appended to file!');\n});
\n"
},
{
"textRaw": "fs.appendFileSync(filename, data, [options])",
"type": "method",
"name": "appendFileSync",
"desc": "fs.appendFile
의 동기버전이다.\n\n
filename
의 변경사항을 감시한다. 콜백 listener
는 파일이 접근될 때마다 호출될\n것이다.\n\n
두번째 아규먼트는 선택사항이다. options
을 전달하는 경우 options
은 두 불리언값의\n멤버변수 persistent
와 interval
을 담고 있는 객체가 될 것이다. persistent
는\n파일을 감사하는 동안 계속해서 프로세스가 실행되어야 하는지를 나타낸다. interval
은\n얼마나 자주 대상을 확인해야 하는지를 밀리초로 나타낸다.\n기본값은 { persistent: true, interval: 5007 }
이다.\n\n
listener
는 두 아규먼트 현재의 stat 객체와 이전의 stat 객체를 받는다.\n\n
fs.watchFile('message.text', function (curr, prev) {\n console.log('the current mtime is: ' + curr.mtime);\n console.log('the previous mtime was: ' + prev.mtime);\n});
\n이 stat 객체들은 fs.Stat
인스턴스다.\n\n
그냥 파일에 접근만 했을 때가 아니라 파일이 수정되었을 때 알림을 받고 싶다면\ncurr.mtime
와 prev.mtime
를 비교해야 한다.\n\n\n
filename
의 변경사항을 감시하는 것을 멈춘다. listener
를 지정하면 해당 리스너만 제거한다.\nlistener
를 지정하지 않으면 모든 리스너를 제거하고 filename
감시를 효율적으로 멈춘다.\n\n
감시받지 않는 파일명으로 fs.unwatchFile()
를 호출하면 오류는 발생하지 않고 아무 작업도\n일어나지 않는다.\n\n
filename
의 변경사항을 감시하고 filename
은 파일이나 디렉토리가 될 수 있다.\n반환객체는 fs.FSWatcher이다.\n\n
두번째 아규먼트는 선택사항이다. options
을 전달한다면 options
은 불리언값의 멤버변수\npersistent
를 담고 있는 객체여야 한다. persistent
는 파일을 감사하는 동안 계속해서\n프로세스가 실행되어야 하는지를 나타낸다. 기본값은 { persistent: true }
이다.\n\n
리스너 콜백은 두 아규먼트 (event, filename)
를 받는다. event
는 'rename'나 'change'이고\nfilename
은 이벤트를 발생시킨 파일의 이름이다.\n\n
fs.watch
API는 모든 플랫폼에서 100% 일치하지 않고 몇몇 상황에서는\n사용할 수 없다.\n\n
이 기능은 의존 운영체제가 제공하는 파일시스템의 변경사항을 알리는 방법에 따라 다르다.\n\n
\ninotify
를 사용한다.kqueue
를 사용한다.event ports
를 사용한다.ReadDirectoryChangesW
에 달려있다.몇가지 이유로 의존하는 기능을 사용할 수 없다면 fs.watch
를 사용할 수 없을 것이다.\n예를 들어 네트워크 파일시스템(NFS, SMB 등)에서 파일이나 디렉토리를 감시하면 종종 신뢰할 수\n있을만큼 동작하지 않거나 전혀 작동하지 않는다.\n\n
stat 폴링(polling)을 사용하지만 더 느리고 덜 신뢰적인 fs.watchFile
는 여전히\n사용할 수 있다.\n\n
모든 클랫폼에서 filename
아규먼트를 콜백에 전달하는 것은 아니다. (현재는 Linux와\nWindows에서만 지원한다.) 이를 지원하는 플랫폼에서 조차도 filename
을 항상 제공한다고\n보장하는 것은 아니다. 그러므로 콜백에 filename
아규먼트가 항상 전달된다고 가정하지 말고\nnull 일 경우를 위한 대체(fallback) 로직을 가지고 있어야 한다.\n\n
fs.watch('somedir', function (event, filename) {\n console.log('event is: ' + event);\n if (filename) {\n console.log('filename provided: ' + filename);\n } else {\n console.log('filename not provided');\n }\n});
\n"
}
]
}
],
"signatures": [
{
"params": [
{
"name": "filename"
},
{
"name": "options",
"optional": true
},
{
"name": "listener",
"optional": true
}
]
}
]
},
{
"textRaw": "fs.exists(path, [callback])",
"type": "method",
"name": "exists",
"desc": "파일시스템을 확인해서 전달한 경로가 존재하는지 검사한다.\n존재여부fmf true나 false로 callback
을 호출한다. 예제:\n\n
fs.exists('/etc/passwd', function (exists) {\n util.debug(exists ? "it's there" : "no passwd!");\n});
\n",
"signatures": [
{
"params": [
{
"name": "path"
},
{
"name": "callback",
"optional": true
}
]
}
]
},
{
"textRaw": "fs.existsSync(path)",
"type": "method",
"name": "existsSync",
"desc": "fs.exists
의 동기버전이다.\n\n
새로운 ReadStream 객체를 반환한다. (Readable Stream
를 봐라)\n\n
options
는 다음의 기본값을 가진 객체다.\n\n
{ flags: 'r',\n encoding: null,\n fd: null,\n mode: 0666,\n bufferSize: 64 * 1024,\n autoClose: true\n}
\noptions
는 전체 파일대신 읽어드릴 파일의 범위인 start
와 end
를 포함할 수 있다.\nstart
와 end
둘 다 포함하고 0 부터 시작한다. encoding
은 'utf8'
,\n'ascii'
, 'base64'
가 될 수 있다.\n\n
autoClose
가 false이면 오류가 발생하더라도 파일 디스크립터를 닫지 않는다. 파일 디스크립터를\n닫고 파일 디스크립터가 새는 문제가 없도록 하는 것은 개발자의 책임이다. autoClose
를 true로\n설정하면(기본 동작) error
나 end
에서 파일 디스크립터를 자동으로 닫을 것이다.\n\n
100 바이트 길이인 파일의 마지막 10 바이트를 읽는 예제.\n\n
\nfs.createReadStream('sample.txt', {start: 90, end: 99});
\n",
"signatures": [
{
"params": [
{
"name": "path"
},
{
"name": "options",
"optional": true
}
]
}
]
},
{
"textRaw": "fs.createWriteStream(path, [options])",
"type": "method",
"name": "createWriteStream",
"desc": "새로운 WriteStream 객체를 반환한다. (Writable Stream
를 봐라.)\n\n
options
는 다음의 기본값을 갖는 객체다.\n\n
{ flags: 'w',\n encoding: null,\n mode: 0666 }
\noptions
도 파일의 시작위치가 아닌 다른 위치에 데이터를 작성하도록 start
옵션을\n포함할 수도 있다. 파일을 교체하는 대신에 파일을 수정하려면 flags
모드를 기본값인\nw
대신에 r+
를 사용해야 한다.\n\n
fs.stat()
, fs.lstat()
, fs.fstat()
가 리턴하는 객체고 이 함수들의 동기함수들도\n이 타입을 리턴한다.\n\n
stats.isFile()
stats.isDirectory()
stats.isBlockDevice()
stats.isCharacterDevice()
stats.isSymbolicLink()
(only valid with fs.lstat()
)stats.isFIFO()
stats.isSocket()
정규 파일에 대한 util.inspect(stats)
는 다음과 유사한 문자열을 리턴할\n것이다.\n\n
{ dev: 2114,\n ino: 48064969,\n mode: 33188,\n nlink: 1,\n uid: 85,\n gid: 100,\n rdev: 0,\n size: 527,\n blksize: 4096,\n blocks: 8,\n atime: Mon, 10 Oct 2011 23:24:11 GMT,\n mtime: Mon, 10 Oct 2011 23:24:11 GMT,\n ctime: Mon, 10 Oct 2011 23:24:11 GMT }
\natime
, mtime
, ctime
는 [Date][MDN-Date] 객체의 인스턴스이고\n이 객체의 값들을 비교하려면 적절한 메서드를 사용해야한다. 대부분의 경우\n[getTime()][MDN-Date-getTime]는 1980년 1월 _1일부터 경과된\n밀리초를 반환할 것이고 이 정수값은 비교하기에 충분하다. 하지만 명확하지\n않은 정보를 보여주는데 사용할 수 있는 추가적인 메서드들이 있다. 더 자세한\n내용은 [MDN JavaScript Reference][MDN-Date] 페이지에 있다.\n\n
ReadStream
는 Readable Stream이다.\n\n
ReadStream의 파일이 열렸을 때 발생한다.\n\n\n
\n" } ] }, { "textRaw": "Class: fs.FSWatcher", "type": "class", "name": "fs.FSWatcher", "desc": "fs.watch()
가 반환하는 객체가 이 타입이다.\n\n
주어진 fs.FSWatcher
에서 변경사항을 감시하는 것을 멈춘다.\n\n
감시하는 디렉토리나 파일명에서 어떤 변경이 생겼을 때 발생한다.\n더 자세한 내용은 fs.watch를 봐라.\n\n
\n" }, { "textRaw": "Event: 'error'", "type": "event", "name": "error", "params": [], "desc": "오류가 생겼을 때 발생한다.\n
\n" } ] } ], "properties": [ { "textRaw": "fs.WriteStream", "name": "WriteStream", "desc": "WriteStream
는 Writable Stream이다.\n\n
WriteStream의 파일이 열렸을 때 발생한다.\n\n
\n" } ], "properties": [ { "textRaw": "file.bytesWritten", "name": "bytesWritten", "desc": "지금까지 작성된 바이트의 수. 작성하기 위해 아직 큐에 있는 데이터는 포함하지 않는다.\n\n
\n" } ] } ], "type": "module", "displayName": "fs" } ] }