파일이 있는지 어떻게 확인 합니까?
모듈의 문서 fs
에는 메소드에 대한 설명이 fs.exists(path, callback)
있습니다. 그러나 내가 이해하는 것처럼 디렉토리 만 존재하는지 확인합니다. 그리고 파일 을 확인해야 합니다 !
어떻게 할 수 있습니까?
답변
왜 파일을 열어 보지 않겠습니까? fs.open('YourFile', 'a', function (err, fd) { ... })
어쨌든 1 분 검색 후 이것을 시도하십시오 :
var path = require('path');
path.exists('foo.txt', function(exists) {
if (exists) {
// do something
}
});
// or
if (path.existsSync('foo.txt')) {
// do something
}
Node.js v0.12.x 이상
모두 path.exists
와 fs.exists
사용되지 않습니다
*편집하다:
변경 : else if(err.code == 'ENOENT')
에: else if(err.code === 'ENOENT')
Linter는 double equals가 triple equals가 아니라고 불평합니다.
fs.stat 사용 :
fs.stat('foo.txt', function(err, stat) {
if(err == null) {
console.log('File exists');
} else if(err.code === 'ENOENT') {
// file does not exist
fs.writeFile('log.txt', 'Some log\n');
} else {
console.log('Some other error: ', err.code);
}
});
답변
이 작업을 동 기적으로 수행하는 가장 쉬운 방법입니다.
if (fs.existsSync('/etc/file')) {
console.log('Found file');
}
API 문서는 existsSync
작동 방식을 말합니다
. 파일 시스템을 확인하여 주어진 경로가 존재하는지 여부를 테스트하십시오.
답변
편집 :v10.0.0
우리가 사용할 수있는
노드 이후fs.promises.access(...)
파일이 있는지 확인하는 비동기 코드 예제 :
async function checkFileExists(file) {
return fs.promises.access(file, fs.constants.F_OK)
.then(() => true)
.catch(() => false)
}
stat의 대안은 new fs.access(...)
:
점검을위한 단축 약속 기능 :
s => new Promise(r=>fs.access(s, fs.constants.F_OK, e => r(!e)))
샘플 사용법 :
let checkFileExists = s => new Promise(r=>fs.access(s, fs.constants.F_OK, e => r(!e)))
checkFileExists("Some File Location")
.then(bool => console.log(´file exists: ${bool}´))
확장 된 약속 방식 :
// returns a promise which resolves true if file exists:
function checkFileExists(filepath){
return new Promise((resolve, reject) => {
fs.access(filepath, fs.constants.F_OK, error => {
resolve(!error);
});
});
}
또는 동 기적으로 수행하려는 경우 :
function checkFileExistsSync(filepath){
let flag = true;
try{
fs.accessSync(filepath, fs.constants.F_OK);
}catch(e){
flag = false;
}
return flag;
}
답변
fs.exists(path, callback)
그리고 fs.existsSync(path)
, 지금은 사용되지 않는 볼 수 있습니다 https://nodejs.org/api/fs.html#fs_fs_exists_path_callback 및 https://nodejs.org/api/fs.html#fs_fs_existssync_path .
파일의 존재를 동 기적으로 테스트하기 위해 ie를 사용할 수 있습니다. fs.statSync(path)
. fs.Stats
파일이 존재하는 경우 객체 참조 반환됩니다 https://nodejs.org/api/fs.html#fs_class_fs_stats를 , 그렇지 않으면 오류가 시도 / catch 문에 의해 사로 잡았 될 슬로우됩니다.
var fs = require('fs'),
path = '/path/to/my/file',
stats;
try {
stats = fs.statSync(path);
console.log("File exists.");
}
catch (e) {
console.log("File does not exist.");
}
답변
V6 이전 버전 :
다음은 문서입니다
const fs = require('fs');
fs.exists('/etc/passwd', (exists) => {
console.log(exists ? 'it\'s there' : 'no passwd!');
});
// or Sync
if (fs.existsSync('/etc/passwd')) {
console.log('it\'s there');
}
최신 정보
V6의 새 버전 : 대한 설명서fs.stat
fs.stat('/etc/passwd', function(err, stat) {
if(err == null) {
//Exist
} else if(err.code == 'ENOENT') {
// NO exist
}
});
답변
최신 비동기 / 대기 방법 (노드 12.8.x)
const fileExists = async path => !!(await fs.promises.stat(path).catch(e => false));
const main = async () => {
console.log(await fileExists('/path/myfile.txt'));
}
main();
우리는 사용할 필요가 fs.stat() or fs.access()
있기 때문에 fs.exists(path, callback)
지금은 사용되지 않습니다
또 다른 좋은 방법은 fs-extra입니다.
답변
fs.exists
1.0.0부터 사용되지 않습니다. fs.stat
대신 사용할 수 있습니다 .
var fs = require('fs');
fs.stat(path, (err, stats) => {
if ( !stats.isFile(filename) ) { // do this
}
else { // do this
}});
다음은 설명서 fs.stats에 대한 링크입니다.