2014-02-16 4 views
0

파일이 있는지를 확인하기 위해 노드 fs()와 같은 방법으로 약간 혼란스러워졌습니다.노드 js-fs 파일이 있습니다 - 조금 혼란스러워집니다

I 수 : (http://nodejs.org/api/fs.html#fs_fs_readfile_filename_options_callback)

fs.readFile('somefile.html', function (err, data) { 
    if (err) { /* it doesn't */ } 
    else { /* it does */ } 
}); 

하지만 그 (이 파일이 시간에 없을 것으로 예상된다)

그리고 그 다음이 오류가 아래의 조건을 실행하는 이상한 느낌 fs.exists() (http://nodejs.org/api/fs.html#fs_fs_exists_path_callback)

훨씬 더 논리적 인 느낌
fs.exists('somefile.html', function (exists) { 
    if(exists) { /* it does */ } 
    else { /* it doesn't */ } 
}); 

,하지만 나는이 읽기 :

"여는 전에 파일이 존재하는지 확인하는 것은 안티 패턴이므로 경쟁 조건에 취약해질 수 있습니다. 다른 프로세스는 fs.exists() 및 fs.open() 호출 사이에서 파일을 제거 할 수 있습니다. 파일을 열어 거기에 없을 때 오류를 처리하십시오. " 나는 '오류 방법'에 대한 가기 전에 내가 이해

- 파일을 확인하는 일반적인 방법이 존재 (등을 열 경우) 무엇

/(아마도 가장 빠른이 될 것이다 너무 깔끔한 대답) - 내 프로그램의 노드를 fs()

논리를 사용하여 간단하다 -

if (file does not exist) { continue the tasks to create it; } 
else { read it and respond with it; } 

마 당신은 이야기의 도덕적 당신이 존재 할 필요가 없습니다 것입니다

var file = fs.readFileSync('somefile.html'); 
if (file) { do stuff } 
else { error } 

을 원하는 일종의을 할 readFileSync을 사용할 수 있습니다

답변

3

뉴욕 주셔서 감사합니다. 파일이 있는지 여부를 확인하는 것입니다. readFile을 열 수 없으면 오류가 발생합니다. 가능한 경우 데이터를 반환합니다.

+0

음, gotya. -이 방법의 비동기 버전을 선호 할 것입니다 - 똑같은 방식으로 작동해야합니까? –

+0

과 fs.open과 fs.readfile 사이에서 fs.readfile (async 또는 sync)을 선택하는 이유는 무엇입니까? 죄송합니다 .. –

+0

http://stackoverflow.com/questions/13858909/synchronous-vs-asynchronous-code-with-node-js에서 sync vs async에 대한 자세한 내용을 볼 수 있습니다. 콜백/함수/값은 실행/설정됩니다. – Steven

관련 문제