[node.js] 파일이 존재하는지 Node.js 확인

파일이 있는지 어떻게 확인 합니까?

모듈의 문서 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.existsfs.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.logfile 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_callbackhttps://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.exists1.0.0부터 사용되지 않습니다. fs.stat대신 사용할 수 있습니다 .

var fs = require('fs');
fs.stat(path, (err, stats) => {
if ( !stats.isFile(filename) ) { // do this 
}
else { // do this 
}});

다음은 설명서 fs.stats에 대한 링크입니다.