Node.js는 경로가 파일인지 디렉토리인지 확인합니다.
이 작업을 수행하는 방법을 설명하는 검색 결과를 얻을 수 없습니다.
내가 원하는 것은 주어진 경로가 파일인지 디렉토리(폴더)인지 알 수 있는 것입니다.
다음은 당신에게 말해줄 것입니다.문서에서:
fs.lstatSync(path_string).isDirectory()
fs.stat() 및 fs.lstat()에서 반환된 개체는 이 유형입니다.
stats.isFile() stats.isDirectory() stats.isBlockDevice() stats.isCharacterDevice() stats.isSymbolicLink() // (only valid with fs.lstat()) stats.isFIFO() stats.isSocket()
참고:
위의 해결책은 다음과 같습니다.throw
하나의Error
, 약만; 들어를예,file
또는directory
존재하지 않습니다.
만약 당신이 원한다면,true
또는false
해 보세요, 접근, 도fs.existsSync(dirPath) && fs.lstatSync(dirPath).isDirectory();
아래 댓글에서 조셉이 언급한 것처럼.
업데이트: 노드.Js > = 10
우리는 새로운 fs.promise API를 사용할 수 있습니다.
const fs = require('fs').promises;
(async() => {
const stat = await fs.lstat('test.txt');
console.log(stat.isFile());
})().catch(console.error)
모든 노드.Js 버전
다음은 노드에서 권장되는 접근 방식인 비동기식으로 경로가 파일인지 디렉터리인지 탐지하는 방법입니다.fs.lstat 사용
const fs = require("fs");
let path = "/path/to/something";
fs.lstat(path, (err, stats) => {
if(err)
return console.log(err); //Handle error
console.log(`Is file: ${stats.isFile()}`);
console.log(`Is directory: ${stats.isDirectory()}`);
console.log(`Is symbolic link: ${stats.isSymbolicLink()}`);
console.log(`Is FIFO: ${stats.isFIFO()}`);
console.log(`Is socket: ${stats.isSocket()}`);
console.log(`Is character device: ${stats.isCharacterDevice()}`);
console.log(`Is block device: ${stats.isBlockDevice()}`);
});
동기식 API를 사용하는 경우 참고:
동기식 형식을 사용하면 많은 예외가 즉시 느려집니다.try/catch를 사용하여 예외를 처리하거나 예외를 버블 업 상태로 만들 수 있습니다.
try{
fs.lstatSync("/some/path").isDirectory()
}catch(e){
// Handle error
if(e.code == 'ENOENT'){
//no such file or directory
//do something
}else {
//do something else
}
}
정말로, 질문은 5년 동안 존재하고 멋진 외관은 없습니까?
function isDir(path) {
try {
var stat = fs.lstatSync(path);
return stat.isDirectory();
} catch (e) {
// lstatSync throws an error if path doesn't exist
return false;
}
}
요구 사항에 따라 노드에 의존할 수 있습니다.path
모듈.
파일 시스템(예: 파일이 아직 생성되지 않은 경우)을 누를 수 없을 수도 있으며, 추가 검증이 필요하지 않은 경우에는 파일 시스템을 치지 않기를 원할 수도 있습니다.만약 당신이 확인하고 있는 것이 다음과 같다고 가정할 수 있다면,.<extname>
형식입니다. 이름을 보십시오.
만약 당신이 ext 이름이 없는 파일을 찾고 있다면, 당신은 확실히 파일 시스템을 눌러야 할 것입니다.그러나 더 복잡한 작업이 필요할 때까지 단순하게 유지합니다.
const path = require('path');
function isFile(pathItem) {
return !!path.extname(pathItem);
}
디렉터리를 반복할 때 이 질문이 필요한 경우:
10 노드 10.10+ 이후 이후,fs.readdir
에는 문자열 대신 디렉터리 항목을 반환하는 옵션이 있습니다.디렉터리 항목에 다음이 있습니다.name
속성 및과같유방용법과 .isDirectory
또는isFile
전화할 필요가 없습니다.fs.lstat
노골적으로
import { promises as fs } from 'fs';
// ./my-dir has two subdirectories: dir-a, and dir-b
const dirEntries = await fs.readdir('./my-dir', { withFileTypes: true });
// let's filter all directories in ./my-dir
const onlyDirs = dirEntries.filter(de => de.isDirectory()).map(de => de.name);
// onlyDirs is now [ 'dir-a', 'dir-b' ]
여기 제가 사용하는 기능이 있습니다.도 아도사않다습니지무를 하지 않습니다.promisify
그리고.await/async
이 게시물의 특징을 공유하려고 생각했습니다.
const promisify = require('util').promisify;
const lstat = promisify(require('fs').lstat);
async function isDirectory (path) {
try {
return (await lstat(path)).isDirectory();
}
catch (e) {
return false;
}
}
:참고: 사안함을 .require('fs').promises;
왜냐하면 그것은 지금 1년 동안 실험적이었기 때문입니다, 그것에 의존하지 않는 것이 좋습니다.
위의 답변은 파일 시스템에 파일 또는 디렉터리 경로가 포함되어 있는지 확인합니다.그러나 지정된 경로만 파일인지 디렉터리인지 식별하지 않습니다.
정답은 "/." (예: --> "/c/dos/run/" <--- trailing period)를 사용하여 디렉터리 기반 경로를 식별하는 것입니다.
아직 작성되지 않은 디렉터리나 파일의 경로와 같은 것입니다.또는 다른 컴퓨터의 경로입니다.또는 동일한 이름의 파일과 디렉터리가 모두 있는 경로입니다.
// /tmp/
// |- dozen.path
// |- dozen.path/.
// |- eggs.txt
//
// "/tmp/dozen.path" !== "/tmp/dozen.path/"
//
// Very few fs allow this. But still. Don't trust the filesystem alone!
// Converts the non-standard "path-ends-in-slash" to the standard "path-is-identified-by current "." or previous ".." directory symbol.
function tryGetPath(pathItem) {
const isPosix = pathItem.includes("/");
if ((isPosix && pathItem.endsWith("/")) ||
(!isPosix && pathItem.endsWith("\\"))) {
pathItem = pathItem + ".";
}
return pathItem;
}
// If a path ends with a current directory identifier, it is a path! /c/dos/run/. and c:\dos\run\.
function isDirectory(pathItem) {
const isPosix = pathItem.includes("/");
if (pathItem === "." || pathItem ==- "..") {
pathItem = (isPosix ? "./" : ".\\") + pathItem;
}
return (isPosix ? pathItem.endsWith("/.") || pathItem.endsWith("/..") : pathItem.endsWith("\\.") || pathItem.endsWith("\\.."));
}
// If a path is not a directory, and it isn't empty, it must be a file
function isFile(pathItem) {
if (pathItem === "") {
return false;
}
return !isDirectory(pathItem);
}
노드 버전: v11.10.0 - 2019년 2월
마지막 생각:왜 파일 시스템을 치는 거지?
다음을 사용하여 디렉터리 또는 파일이 있는지 확인할 수 있습니다.
// This returns if the file is not a directory.
if(fs.lstatSync(dir).isDirectory() == false) return;
// This returns if the folder is not a file.
if(fs.lstatSync(dir).isFile() == false) return;
형식을 반환하는 함수
나는 커피를 좋아한다.
type: (uri)-> (fina) ->
fs.lstat uri, (erro,stats) ->
console.log {erro} if erro
fina(
stats.isDirectory() and "directory" or
stats.isFile() and "document" or
stats.isSymbolicLink() and "link" or
stats.isSocket() and "socket" or
stats.isBlockDevice() and "block" or
stats.isCharacterDevice() and "character" or
stats.isFIFO() and "fifo"
)
용도:
dozo.type("<path>") (type) ->
console.log "type is #{type}"
언급URL : https://stackoverflow.com/questions/15630770/node-js-check-if-path-is-file-or-directory
'programing' 카테고리의 다른 글
ASPXAUTH 쿠키란 무엇입니까? (0) | 2023.06.12 |
---|---|
TypeScript에서 참조를 사용할 때, 가져오기를 사용할 때는 언제입니까? (0) | 2023.06.12 |
루비에서 attr_accessor란 무엇입니까? (0) | 2023.06.12 |
왜 이것은 유형 불일치가 아닌가요? (0) | 2023.06.12 |
'!:'와 '의 차이점은 무엇입니까?TypeScript 개체 정의에서? (0) | 2023.06.12 |