Node.js에 파일 / 디렉토리가 있는지 동 기적으로 확인


1207

파일이나 디렉토리가 존재하는 경우 node.js를 사용하여 동기식으로 어떻게 확인할 수 있습니까?


57
동기 작업은 모듈을 반환하기 전에 일회성 파일 / 디렉토리 작업을 수행하는 데 좋습니다. 예를 들어 구성 파일을 부트 스트랩합니다.
jocull

1
웜 캐시있는 @PaulDraper 모든 경우에 해당되는 것은 아닙니다.
mikemaccana

11
성능에 관계없이 때로는 개발자 경험을 위해 동기화 방식으로 실행하기를 원할 수도 있습니다. 예를 들어, 의도적으로 차단해야하는 데이터 처리 스크립트에 노드를 사용하는 경우 비동기 exists는 불필요한 콜백을 추가합니다.
Kunok

2
Kunok의 진술에 확실히 +1. 내 코드의 나머지 부분에서는 속도가 실제로 중요한 병목 현상이있을 때 코드를 더 복잡하게 만듭니다. 왜 그 원리를 파일 읽기에 적용하지 않습니까? 많은 프로그램의 많은 부분에서 코드 단순성 / 가독성이 실행 속도보다 중요 할 수 있습니다. 병목 현상이 발생하면 비동기 메서드를 사용하여 추가 코드 실행을 중지하지 않습니다. 그렇지 않으면 ... 동기화가 좋습니다. 맹목적으로 동기화를 싫어하지 마십시오.
BryanGrezeszak

3
사용자가 "동 기적으로 수행하는 방법"을 명시 적으로 요청하기 때문에 "주의"하지 마십시오.
jClark

답변:


2238

이 질문에 대한 답변은 수년에 걸쳐 변경되었습니다. 현재의 대답은 연대순으로 수년에 걸쳐 다양한 답변 다음, 상단에 여기에 있습니다 :

현재 답변

당신은 사용할 수 있습니다 fs.existsSync():

const fs = require("fs"); // Or `import fs from "fs";` with ESM
if (fs.existsSync(path)) {
    // Do something
}

몇 년 동안 더 이상 사용되지 않지만 더 이상 사용되지 않습니다. 문서에서 :

참고 fs.exists()사용되지 있지만 fs.existsSync()아닙니다. fs.exists()다른 Node.js 콜백과 일치하지 않는 매개 변수를 허용 하는 콜백 매개 변수 fs.existsSync()는 콜백을 사용하지 않습니다.

당신은 특별히 요구 한 동기 체크하지만, 당신이 사용할 수있는 경우 비동기 (I / O와 함께 일반적으로 가장) 대신에 수표를 사용 fs.promises.access하면 사용하는 경우 async기능 또는 fs.access(이후 exists사용되지 않습니다 )없는 경우 :

에서 async기능 :

try {
    await fs.promises.access("somefile");
    // The check succeeded
} catch (error) {
    // The check failed
}

또는 콜백 :

fs.access("somefile", error => {
    if (!error) {
        // The check succeeded
    } else {
        // The check failed
    }
});

역사적 답변

다음은 시간순으로 기록 된 답변입니다.

  • 2010 년의 원래 답변
    ( stat/ statSync또는 lstat/ lstatSync)
  • 2012 년 9 월 업데이트
    ( exists/ existsSync)
  • 2015 년 2 월 업데이트
    ( exists/의 사용 중단이 임박 existsSync했으므로 stat/ statSync또는 lstat/로 되돌아 갈 수 있음 lstatSync)
  • 2015 년 12 월 업데이트
    ( fs.access(path, fs.F_OK, function(){})/ 도 fs.accessSync(path, fs.F_OK)있지만 파일 / 디렉토리가 존재하지 않으면 오류입니다. 열지 않고 존재 여부를 확인 해야하는 경우 fs.stat사용 fs.access하는 것이 좋습니다 . )
  • 2016 년 12 월 업데이트 는 더 이상 사용
    fs.exists()되지 않지만 fs.existsSync()더 이상 사용되지 않습니다. 이제 안전하게 사용할 수 있습니다.

2010 년 원문 :

당신은 사용할 수 있습니다 statSync또는 lstatSync( 문서 링크 ), 당신에게 제공하는 fs.Stats객체 . 일반적으로 동기 버전의 함수를 사용할 수 Sync있는 경우 끝에 비동기 버전과 이름이 같습니다 . statSync동기 버전도 마찬가지 입니다 stat. 등 lstatSync의 동기 버전입니다 lstat.

lstatSync 파일이 존재하는지 여부와 파일인지 디렉토리인지 (일부 파일 시스템, 심볼릭 링크, 블록 장치, 문자 장치 등), 예를 들어 존재하는지 여부를 알아야하는 경우 디렉토리 :

var fs = require('fs');
try {
    // Query the entry
    stats = fs.lstatSync('/the/path');

    // Is it a directory?
    if (stats.isDirectory()) {
        // Yes it is
    }
}
catch (e) {
    // ...
}

... 그리고 마찬가지로 파일이라면 isFile; 블록 장치 인 경우 isBlockDevice등이 있습니다 try/catch.; 항목이 존재하지 않으면 오류가 발생합니다.

항목 무엇인지 상관하지 않고 항목의 존재 여부 만 알고 싶다면 user618408에서 언급 한대로path.existsSync (또는 최신 버전으로 fs.existsSync) 사용할 수 있습니다 .

var path = require('path');
if (path.existsSync("/the/path")) { // or fs.existsSync
    // ...
}

필요하지는 않지만 try/catch그게 무엇인지에 대한 정보는 제공 하지 않습니다 . path.existsSync오래 전에 사용되지 않습니다.


참고 사항 : 동기식 으로 확인하는 방법을 명시 적으로 요청 했으므로 xyzSync위 기능 버전을 사용했습니다 . 그러나 가능하면 I / O를 사용하면 동기 호출을 피하는 것이 가장 좋습니다. I / O 하위 시스템으로의 호출은 CPU의 관점에서 상당한 시간이 걸립니다. 전화 lstat하는 것이 얼마나 쉬운 지 참고하십시오 lstatSync.

// Is it a directory?
lstat('/the/path', function(err, stats) {
    if (!err && stats.isDirectory()) {
        // Yes it is
    }
});

그러나 동기 버전이 필요하면 거기에 있습니다.

2012 년 9 월 업데이트

몇 년 전의 아래 답변은 이제 약간 오래된 것입니다. 현재 방법은 아래 버전이 아닌 fs.existsSync파일 / 디렉토리 존재에 대한 동기 검사 (또는 fs.exists비동기 검사) 를 수행하는 데 사용 하는 것 path입니다.

예:

var fs = require('fs');

if (fs.existsSync(path)) {
    // Do something
}

// Or

fs.exists(path, function(exists) {
    if (exists) {
        // Do something
    }
});

2015 년 2 월 업데이트

그리고 여기에 우리는 2015 년이며 Node 문서는 이제 " fs.existsSync그리고 fs.exists더 이상 사용되지 않을 것"이라고 말합니다. (노드 사람들은 무언가를 열기 전에 무언가 존재하는지 확인하는 것이 멍청하다고 생각하기 때문에 그것이 존재하는지 여부를 확인하는 유일한 이유는 아닙니다!)

그래서 우리는 아마도 다양한 stat방법으로 돌아 왔을 것입니다 . 물론 이것이 또 다시 바뀌지 않는 한.

2015 년 12 월 업데이트

얼마나 오래 있었는지 모르지만 fs.access(path, fs.F_OK, ...)/도fs.accessSync(path, fs.F_OK) 있습니다. 그리고, 10 월 2016로 적어도 fs.stat설명서를 사용하는 것이 좋습니다 fs.access존재 검사를 수행하는 ( "파일이 나중에 그것을 조작하지 않고있는 경우, 확인하려면 fs.access()좋습니다." ). 그러나 액세스 할 수없는 액세스는 오류 로 간주 되므로 파일에 액세스 할 수있을 것으로 예상되는 경우 가장 좋습니다.

var fs = require('fs');

try {
    fs.accessSync(path, fs.F_OK);
    // Do something
} catch (e) {
    // It isn't accessible
}

// Or

fs.access(path, fs.F_OK, function(err) {
    if (!err) {
        // Do something
    } else {
        // It isn't accessible
    }
});

2016 년 12 월 업데이트

당신은 사용할 수 있습니다 fs.existsSync():

if (fs.existsSync(path)) {
    // Do something
}

몇 년 동안 더 이상 사용되지 않지만 더 이상 사용되지 않습니다. 문서에서 :

참고 fs.exists()사용되지 있지만 fs.existsSync()아닙니다. fs.exists()다른 Node.js 콜백과 일치하지 않는 매개 변수를 허용 하는 콜백 매개 변수 fs.existsSync()는 콜백을 사용하지 않습니다.


7
path.exists와 path.existsSync는 fs.exists와 fs.existsSync에 찬성하여 더 이상 사용되지 않습니다
Drew

15
"노드 사람들은 무언가를 열기 전에 무언가 존재하는지 확인하는 것이 멍청하다고 생각합니다." 파일이 있는지 확인하는 것이 왜 바보입니까?
Petr Hurtak

32
@ PetrHurtak : 존재 여부를 확인 해야하는 이유가 많이 있기 때문에 항상 그런 것은 아니지만 파일 을 열려면open 호출을 발행 하고 예외를 처리하는 것이 가장 좋습니다 . 파일이 아닌 경우 녹이다. 결국, 현실 세계는 혼란스러워합니다. 먼저 확인하고 거기에 있다고해서 열려고하더라도 여전히 거기에 있다는 것은 아닙니다. 먼저 확인했는데 거기에 있지 않다고해서 잠시 후에는 없을 것입니다. 이와 같은 타이밍은 엣지 케이스처럼 보이지만 항상 나타납니다 . 그래서 경우 열려는거야, 첫번째 확인에서 어떤 점.
TJ Crowder 2016 년

13
그리고 여기 제어 흐름에 오류를 사용하는 것이 안티 패턴이라고 생각했습니다. link
argyle

4
@jeromeyers : 가능하지만 Ionică 가 이미 해냈습니다 ( 위의 주석 참조 ). :-)
TJ Crowder

124

소스를 보면 동기 버전 인 path.exists-이 path.existsSync있습니다. 문서에서 누락 된 것 같습니다.

최신 정보:

path.exists그리고 path.existsSync지금 사용되지 않습니다 . 및을 사용하십시오fs.existsfs.existsSync .

2016 업데이트 :

fs.exists 그리고 fs.existsSync또 한 사용되지 않습니다 . 대신 fs.stat () 또는 fs.access ()를 사용하십시오.

2019 업데이트 :

사용하십시오 fs.existsSync. 더 이상 사용되지 않습니다. https://nodejs.org/api/fs.html#fs_fs_existssync_path



21
사실, 가장 최근의 답변 : path.existsSync는 더 이상 사용되지 않습니다. 이제는이라고 fs.existsSync합니다.
Olivier Lalonde

9
이제 문서에서 fs.exists가 더 이상 사용되지 않을 것이라고 말합니다. nodejs.org/api/fs.html#fs_fs_existssync_path
Greg Hornby

나는 이전 exists함수 를 대체하기 위해 작은 라이브러리를 작성했습니다 .is-there
Ionică Bizău

6
currenct docs (버전 ~ 9) fs.exists는 더 이상 사용되지 않는 것으로 표시 되어 있습니다 fs.existsSync!
Kunok

57

현재 권장되는 (2015 년 기준) API (노드 문서 당)를 사용하면 다음과 같습니다.

var fs = require('fs');

function fileExists(filePath)
{
    try
    {
        return fs.statSync(filePath).isFile();
    }
    catch (err)
    {
        return false;
    }
}

의견에서 @broadband가 제기 한 EPERM 문제에 대한 응답으로 좋은 지적을 제시합니다. fileExists ()는 실제로 부울 리턴을 약속 할 수 없기 때문에 많은 경우에 이것을 생각하는 좋은 방법이 아닐 수 있습니다. 파일이 존재하는지 또는 존재하지 않는지 확실하게 결정할 수 있지만 권한 오류가 발생할 수도 있습니다. 권한 오류는 확인중인 파일이 포함 된 디렉토리에 대한 권한이 없기 때문에 파일이 존재한다는 것을 의미하지는 않습니다. 물론 파일 존재를 확인하는 데 다른 오류가 발생할 수 있습니다.

따라서 위의 코드는 실제로 doesFileExistAndDoIHaveAccessToIt ()이지만 귀하의 질문은 doesFileNotExistAndCouldICreateIt () 일 수 있습니다. 이것은 완전히 다른 논리입니다 (특히 EPERM 오류를 설명해야 함).

fs.existsSync 답변이 여기에 직접 질문 한 내용을 해결하지만, 종종 원하는 것이 아닐 것입니다 ( "무언가"가 경로에 존재하는지 여부를 알고 싶지는 않을 것입니다. 존재하는 것은 파일 또는 디렉토리입니다).

결론은 파일이 존재하는지 확인하는 경우 결과를 기반으로 조치를 취하려고하며 아마도 논리 (확인 및 / 또는 후속 조치)가 아이디어를 수용해야하기 때문에이를 수행하는 것입니다. 해당 경로에서 발견 된 것은 파일 또는 디렉토리 일 수 있으며 검사 과정에서 EPERM 또는 기타 오류가 발생할 수 있습니다.


4
좋아요, || 파일 / 폴더 검사기 인 isDirectory () var stats = fs.statSync (filePath); 반환 stats.isFile () || stats.isDirectory ();
bob

4
프로그램에 파일 액세스 권한이없는 경우 파일이 존재하더라도 여전히 거짓을 반환합니다. 예를 들어 파일 chmod ugo-rwx file.txt 또는 Windows 마우스 오른쪽 버튼 클릭 ... 예외 메시지 : 예외 fs.statSync (./ f.txt) : 오류 : EPERM : 작업이 허용되지 않습니다. 통계 'X : \ f.txt'. 따라서이 경우에는 상위 코드가 적용되지 않습니다.
광대역

2
와, JS는 때때로 지체됩니다. 확실히, 시간의 97 %는 파일을 사용할 것이지만 file.exists()3 % 를위한 간단한 효용이없고 대신 이것을 시도 캐치로 랩핑하도록 강요합니까? 진짜 ... 오늘의 암캐.
expelledboy

20

다른 업데이트

이 질문에 자신에 대한 답변을 필요로 내가 노드 문서를보고, 당신이해야 것 없는 파일이 존재하지 않는 경우 감지 fs.open 사용하고 출력 오류를 사용하는 대신, fs.exists를 사용 :

문서에서 :

fs.exists ()는 시대를 초월한 것이며 역사적 이유로 만 존재합니다. 자신의 코드에서 사용할 이유가 거의 없습니다.

특히 파일을 열기 전에 파일이 존재하는지 확인하면 안티 패턴으로 인해 경쟁 조건에 취약 해집니다. 다른 프로세스가 fs.exists () 및 fs.open () 호출 사이에서 파일을 제거 할 수 있습니다. 파일을 열고없는 경우 오류를 처리하십시오.

http://nodejs.org/api/fs.html#fs_fs_exists_path_callback


1
오히려 개방보다 openSync 함께 할 수있는 방법이있다
그렉 혼비

1
@GregHornby openSync와 동일한 방식으로 작동해야한다고 생각합니다.
Melbourne2991

2
여전히 필요 exists 하고 existsSync내가 만든 사람들을 위해 is-there.
Ionică Bizău

6
이 지원 중단으로 인해 버그가 발생했습니다. 필요한 모든 것은 파일의 존재에 대한 지식 일 때 오류가 발생했는지 또는 리소스 낭비처럼 보이지 않는지 확인하기 위해 파일을 여는 것입니다.
Josh Hansen

11

파일이 존재하는지 테스트하기 위해 아래 기능을 사용합니다. 다른 예외도 포착합니다. 따라서 권한 문제가있는 경우 chmod ugo-rwx filename또는 예를 들어 Windows Right Click -> Properties -> Security -> Advanced -> Permission entries: empty list ..함수에서 예외를 반환해야합니다. 파일이 존재하지만 액세스 할 수있는 권한이 없습니다. 이런 종류의 예외를 무시하는 것은 잘못입니다.

function fileExists(path) {

  try  {
    return fs.statSync(path).isFile();
  }
  catch (e) {

    if (e.code == 'ENOENT') { // no such file or directory. File really does not exist
      console.log("File does not exist.");
      return false;
    }

    console.log("Exception fs.statSync (" + path + "): " + e);
    throw e; // something else went wrong, we don't have rights, ...
  }
}

파일이 존재하지 않는 경우 예외 출력, nodejs 오류 문서 :

{
  [Error: ENOENT: no such file or directory, stat 'X:\\delsdfsdf.txt']
  errno: -4058,
  code: 'ENOENT',
  syscall: 'stat',
  path: 'X:\\delsdfsdf.txt'
}

파일에 대한 권한이 없지만 존재하는 경우는 예외입니다.

{
  [Error: EPERM: operation not permitted, stat 'X:\file.txt']
  errno: -4048,
  code: 'EPERM',
  syscall: 'stat',
  path: 'X:\\file.txt'
}

2
실제로 이와 같이, 노드가이 작업을 수행하는 마지막 37 가지 방법을 폐기 한 이후 최신 답변 중 하나입니다.
1mike12

바, 넌 날 이겼어 이 글을 읽었다면 시간을 절약 할 수있었습니다.
jgmjgm

5

fs.exists ()는 더 이상 사용되지 않습니다 https://nodejs.org/api/fs.html#fs_fs_exists_path_callback

https://github.com/nodejs/node-v0.x-archive/blob/master/lib/module.js#L86 에서 사용되는 핵심 nodejs 방법을 구현할 수 있습니다.

function statPath(path) {
  try {
    return fs.statSync(path);
  } catch (ex) {}
  return false;
}

stats 객체를 반환 한 다음 stats 객체를 얻은 후에 시도 할 수 있습니다

var exist = statPath('/path/to/your/file.js');
if(exist && exist.isFile()) {
  // do something
}

4

여기에 몇 가지 답변 말한다 fs.exists하고 fs.existsSync모두 사용되지 않습니다. 문서에 따르면 이것은 더 이상 사실이 아닙니다. fs.exists지금 만 정의됩니다.

fs.exists ()는 더 이상 사용되지 않지만 fs.existsSync ()는 사용되지 않습니다. fs.exists ()에 대한 콜백 매개 변수는 다른 Node.js 콜백과 일치하지 않는 매개 변수를 승인합니다. fs.existsSync ()는 콜백을 사용하지 않습니다.

따라서 fs.existsSync () 를 안전하게 사용 하여 파일이 존재하는지 동 기적으로 확인할 수 있습니다.


3

path모듈은 동기 버전을 제공하지 않으므로 모듈 path.exists을 다루어야 fs합니다.

내가 상상할 수있는 가장 빠른 것은 fs.realpathSynccatch 해야하는 오류를 발생시키는 것입니다. 따라서 try / catch로 자신의 래퍼 기능을 만들어야합니다.


1

fileSystem (fs) 테스트를 사용하면 오류 객체가 트리거되며 try / catch 문으로 랩핑해야합니다. 약간의 노력을 절약하고 0.4.x 분기의 기능 소개를 사용하십시오.

var path = require('path');

var dirs = ['one', 'two', 'three'];

dirs.map(function(dir) {
  path.exists(dir, function(exists) {
    var message = (exists) ? dir + ': is a directory' : dir + ': is not a directory';
    console.log(message);
  });
});

2
path.exists는 이제 fs 아래에 있으므로 fs.exists (path, callback)
Todd Moses

0

의 문서를 fs.stat()사용 말한다 fs.access()파일을 조작하지 않을 경우. 그것은 정당성을 부여하지 않았고, 더 빠르거나 덜 기억적일 수 있습니까?

선형 자동화에 노드를 사용하므로 파일 존재를 테스트하는 데 사용하는 기능을 공유한다고 생각했습니다.

var fs = require("fs");

function exists(path){
    //Remember file access time will slow your program.
    try{
        fs.accessSync(path);
    } catch (err){
        return false;
    }
    return true;
}

0

사람들이 '정확하게'질문에 직접 대답하지 않는다고 지적하면 대안 옵션을 더 많이 가져옵니다.

동기화 솔루션 :

fs.existsSync('filePath')여기 문서참조하십시오 .

경로가 존재하면 true를, 그렇지 않으면 false를 반환합니다.

비동기 약속 솔루션

비동기 컨텍스트에서는 await키워드 를 사용하여 비동기 방식으로 비동기 버전을 작성할 수 있습니다 . 비동기 콜백 메소드를 다음과 같은 약속으로 간단히 바꿀 수 있습니다.

function fileExists(path){
  return new Promise((resolve, fail) => fs.access(path, fs.constants.F_OK, 
    (err, result) => err ? fail(err) : resolve(result))
  //F_OK checks if file is visible, is default does no need to be specified.

}

async function doSomething() {
  var exists = await fileExists('filePath');
  if(exists){ 
    console.log('file exists');
  }
}

access ()에 대한 문서 .


1
OP는 동기식 솔루션을 원합니다
vdegenne

코드를 다음과 같이 업데이트해야합니다function asyncFileExists(path) { //F_OK checks if file is visible, is default does no need to be specified. return new Promise(function (res, rej) { fs.access( path, fs.constants.F_OK, function (err) { err ? rej(err) : res(true); }, ); }); }
pery mimon

0

파일이 존재하는지 알고 싶다면 파일이 있으면 필요할 것으로 예상 할 수 있습니다.

function getFile(path){
    try{
        return require(path);
    }catch(e){
        return false;
    }
}

-1

여기에 간단한 래퍼 솔루션이 있습니다.

var fs = require('fs')
function getFileRealPath(s){
    try {return fs.realpathSync(s);} catch(e){return false;}
}

용법:

  • 디렉토리와 파일 모두에서 작동
  • 항목이 존재하면 파일 또는 디렉토리의 경로를 리턴합니다.
  • 항목이 없으면 false를 반환합니다.

예:

var realPath,pathToCheck='<your_dir_or_file>'
if( (realPath=getFileRealPath(pathToCheck)) === false){
    console.log('file/dir not found: '+pathToCheck);
} else {
    console.log('file/dir exists: '+realPath);
}

return = false인지 테스트하려면 === 연산자를 사용해야합니다. 적절한 작업 조건에서 fs.realpathSync ()가 false를 반환하는 논리적 인 이유는 없으므로 100 % 작동해야한다고 생각합니다.

오류가 발생하지 않아 성능 저하가 발생하지 않는 솔루션을 선호합니다. API 관점에서 fs.exists ()는 가장 우아한 솔루션처럼 보입니다.


1
@ 댄, 감사합니다. 잘린 텍스트를 제거했습니다. 그 메모가 무엇인지 기억할 수 없습니다. 그것이 오면 메모를 추가합니다.
Timothy C. Quinn

1
Np. 내 댓글을 삭제하고 있습니다.
Dan Dascalescu

-2

답변에서 (직접적이고 명시적인 검사에서와 같이) 공식 API 지원이없는 것으로 보입니다. 많은 답변이 stat를 사용한다고 말하지만 엄격하지는 않습니다. 예를 들어 stat에 의해 발생한 오류는 무언가가 존재하지 않는다는 것을 의미 할 수 없습니다.

존재하지 않는 것으로 시도해 봅시다.

$ node -e 'require("fs").stat("god",err=>console.log(err))'
{ Error: ENOENT: no such file or directory, stat 'god' errno: -2, code: 'ENOENT', syscall: 'stat', path: 'god' }

존재하지만 우리가 액세스 할 수없는 것으로 시도해보십시오.

$ mkdir -p fsm/appendage && sudo chmod 0 fsm
$ node -e 'require("fs").stat("fsm/appendage",err=>console.log(err))'
{ Error: EACCES: permission denied, stat 'access/access' errno: -13, code: 'EACCES', syscall: 'stat', path: 'fsm/appendage' }

최소한 당신은 원할 것입니다 :

let dir_exists = async path => {
    let stat;
    try {
       stat = await (new Promise(
           (resolve, reject) => require('fs').stat(path,
               (err, result) => err ? reject(err) : resolve(result))
       ));
    }
    catch(e) {
        if(e.code === 'ENOENT') return false;
        throw e;
    }

    if(!stat.isDirectory())
        throw new Error('Not a directory.');

    return true;
};

실제로 동기 부여를 원하거나 동기 부여처럼 작성하기를 원하는지에 대한 질문은 명확하지 않습니다. 이 예제는 await / async를 사용하여 동기식으로 만 작성되고 비동기 적으로 실행되도록합니다.

이것은 최상위 레벨에서 호출해야 함을 의미합니다.

(async () => {
    try {
        console.log(await dir_exists('god'));
        console.log(await dir_exists('fsm/appendage'));
    }
    catch(e) {
        console.log(e);
    }
})();

다른 방법은 비동기 호출에서 반환 된 약속에 .then 및 .catch를 사용하는 것입니다.

무언가 존재하는지 확인하려면 디렉토리 나 파일과 같은 올바른 유형인지 확인하는 것이 좋습니다. 이것은 예제에 포함되어 있습니다. 심볼릭 링크가 허용되지 않으면 stat 대신 링크를 통과하므로 stat 대신 lstat를 사용해야합니다.

여기에서 코드를 동기화하기 위해 모든 비동기를 대체하고 대신 statSync를 사용할 수 있습니다. 그러나 일단 비동기 및 대기가 보편적으로 지원되면 동기화 호출은 결국 감가 상각되기 위해 중복 될 것입니다 (그렇지 않으면 비동기와 마찬가지로 체인을 어디서나 정의하여 실제로 무의미하게 만듭니다).


1
원래 질문은 그것을 지정하지 않습니다. 나는 또한 모호하지 않은 일을하는 방법을 보여주고있다. 명확성이 부족하여 많은 답변이 버그를 유발할 수 있습니다. 사람들은 종종 물건을 프로그래밍하기를 원하기 때문에 동 기적으로 보이지만 동기 실행을 원하지는 않습니다. statSync는 내가 보여준 코드와 다릅니다. 실제로 원하는 것에 대한 설명은 모호하므로 개인 해석 만 강요합니다. 답을 찾으면 이해하지 못하거나 의견이나 PM에 간단히 편집하여 필요한 편집 작업을 수행하는 것이 좋습니다.
jgmjgm

1
내 코드 샘플을 훔치려면 이름을 적절하게 지정하고 github에 넣고 npm에 추가하면 대답은 한 줄 / 링크 만됩니다 : D.
jgmjgm

이 코드는 예를 들어 짧지 만 &&! isFile 또는 심볼릭 링크 확인 등을 포함하는 편집 제안을 제출할 수 있습니다. 내가 이미 지적했듯이 내 대답은 질문에 대한 하나의 해석을 만족 시키며 한 줄 제안과 같은 일을하지 않습니다.
jgmjgm
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.