Node.js에서 파일의 존재 여부를 판단합니다
왜 fs를 추천하지 않습니까?exists
우리가 리셋 함수를 설계할 때, 통상적으로'오류 우선 리셋 함수'라는 원칙을 따른다. 즉, 반환값의 첫 번째 파라미터는 오류 정보로 오류 여부를 검증하고, 다른 파라미터는 데이터를 되돌려주는 데 쓰인다.
아래와 같이 fs입니다.exists의 사용 예시에서 하나의 볼 값을 직접 되돌려주었는데'오류 우선의 리셋 함수'라는 설계 원칙에 위배된다. 이것은 한 가지 원인이다.
fs.exists('/etc/passwd', (exists) => {
console.log(exists ? ' ' : ' ');
});
또 하나는 fs에서 추천하지 않는 거예요.open()、 fs.readFile () 또는 fs.writeFile () 을 사용하기 전에 fs.exists () 는 파일의 존재 여부를 판단합니다. 왜냐하면 이것은 경쟁 조건을 일으킬 수 있기 때문입니다. 만약에 다중 프로세스에서 프로그램의 실행이 완전히 선형적이지 않으면 프로그램의 한 프로세스가 fs를 실행할 때exists와 fs.writeFile () 을 사용하면 다른 프로세스가 이 사이에서 파일의 상태를 변경할 수 있습니다. 그러면 예상치 못한 결과를 초래할 수 있습니다.권장하지 않음:
(async () => {
const exists = await util.promisify(fs.exists)('text.txt');
console.log(exists);
await sleep(10000);
if (exists) {
try {
const res = await util.promisify(fs.readFile)('text.txt', { encoding: 'utf-8' });
console.log(res);
} catch (err) {
console.error(err.code, err.message);
throw err;
}
}
})();
추천:
(async () => {
try {
const data = await util.promisify(fs.readFile)('text.txt', { encoding: 'utf-8' });
console.log(data);
} catch (err) {
if (err.code === 'ENOENT') {
console.error('File does not exists');
} else {
throw err;
}
}
})();
현재exists는 이미 폐기되었습니다. 또한 파일을 직접 사용하지 않을 때만 파일이 존재하는지 검사할 수 있습니다. 다음은 파일이 존재하는지 확인하는 방법을 추천합니다.사용 fs.stat
fs.stat fs 반환Stats 대상, 이 대상은 파일의 크기, 창설 시간 등 파일에 대한 많은 정보를 제공합니다.그중에는 두 가지 방법stats가 있다.isDirectory()、stats.isFile () 은 디렉토리인지 파일인지 여부를 판단하는 데 사용됩니다.
const stats = await util.promisify(fs.stat)('text1.txt');
console.log(stats.isDirectory()); // false
console.log(stats.isFile()); // true
파일이 존재하는지 확인하기만 하면 아래의 fs를 추천합니다.access.사용 fs.access
fs.access는 모드 매개 변수를 수신하면 파일이 존재하는지, 읽을 수 있는지, 쓸 수 있는지 판단할 수 있으며, 반환 값은err 매개 변수입니다.
const file = 'text.txt';
// 。
fs.access(file, fs.constants.F_OK, (err) => {
console.log(`${file} ${err ? ' ' : ' '}`);
});
// 。
fs.access(file, fs.constants.R_OK, (err) => {
console.log(`${file} ${err ? ' ' : ' '}`);
});
// 。
fs.access(file, fs.constants.W_OK, (err) => {
console.log(`${file} ${err ? ' ' : ' '}`);
});
// 、 。
fs.access(file, fs.constants.F_OK | fs.constants.W_OK, (err) => {
if (err) {
console.error(
`${file} ${err.code === 'ENOENT' ? ' ' : ' '}`);
} else {
console.log(`${file} , `);
}
});
같은 것도 fs에서 추천하지 않아요.open()、 fs.readFile () 또는 fs.writeFile () 을 사용하기 전에 fs.exists () 가 파일의 존재 여부를 판단하면 경쟁 조건을 일으킬 수 있습니다.Reference
http://nodejs.cn/api/fs.html
지금까지 노드였습니다.js에서 파일의 존재 여부를 판단하는 상세한 내용, 더 많은 Node.js 파일의 존재 여부를 판단하는 자료는 저희 기타 관련 문장에 주목하세요!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Grunt에서 즉석 템플릿 엔진이 필요했기 때문에 마침내 만들었습니다.jade 라든지 ejs 라고도 좋지만, 보다 심플하게 하고 싶다고 생각해. json을 떨어 뜨렸다. 플레이스홀더(:TAG)를 마련해, 이런 HTML 만들어 둔다. template.html 자리 표시자의 문자열을 키로...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.