목차
fs.mkdir 파일 디렉토리가 추가되었습니다
사례 사용
fs.mkdir의 향상된 버전
재귀 버전
for 루프 + 대기 버전
fs.rmdir 파일 디렉토리 삭제
fs.rmdir 향상된 버전
직렬 버전
병렬 버전
병렬과 직렬의 차이점
파일 디렉터리 작업의 본질
웹 프론트엔드 JS 튜토리얼 Nodejs 파일 모듈의 fs.mkdir 및 fs.rmdir에 대한 간략한 토론

Nodejs 파일 모듈의 fs.mkdir 및 fs.rmdir에 대한 간략한 토론

Jun 22, 2021 am 10:29 AM
nodejs 파일 작업

이 문서에서는 Nodejs 파일 작업 fs.mkdir 및 fs.rmdir을 안내합니다. 도움이 필요한 친구들이 모두 참고할 수 있기를 바랍니다.

Nodejs 파일 모듈의 fs.mkdir 및 fs.rmdir에 대한 간략한 토론

【추천 학습: "nodejs tutorial"】

fs.mkdir 파일 디렉토리가 추가되었습니다

사례 사용

  • 디렉토리를 단계별로 추가하면 성공적으로 인쇄됩니다
fs.mkdir("a", function (err) {
    // 当a不存在的时候直接创建 a/b会报错
 if (err) {
    console.log(err);
    return;
  }
  console.log("success...");//success
});
로그인 후 복사
  • 존재하지 않는 디렉토리의 여러 레벨에 걸쳐 디렉토리를 추가하는 중 오류가 발생했습니다! ! , 노드 자체의 내장 모듈은 존재하지 않는 디렉터리 아래에 디렉터리 추가를 지원하지 않습니다(이것이 제가 원하는 것입니다)

Nodejs 파일 모듈의 fs.mkdir 및 fs.rmdir에 대한 간략한 토론

fs.mkdir의 향상된 버전

재귀 버전

  • 추가할 경로를 "/"에 따라 잘라 배열 캐시를 생성

  • index 초기값 = 1; 경로에 해당하는 배열에 대해 순서대로 Slice(0, index)를 수행하고 Join( '/') 차단 후 경로 문자열에 currentPath

  • fs.stat를 사용하여 파일의 상태를 설명합니다. 파일이 없으면 오류가 발생합니다

  • 어젯밤에 오류가 발생하여 fs를 호출했습니다. .mkdir(currentPath, 재귀적으로 자신을 호출);

  • 파일이 존재하고 자신을 호출합니다

코드 구현

function mkdir(pathStr, cb) {
  let pathList = pathStr.split("/");
  // 递归调用fs.mkdir
  let index = 1;
  function make(err) {
    if (err) return cb(err);
    if (index === pathList.length + 1) return cb();
    //每次 调用要将上次的已经生成的文件名做下次的目标文件,
    // 所以 slice(0, index) 第二参数也要 累加
    //slice(0, index) 截取后join('/')  成字符串
    let currentPath = pathList.slice(0, index++).join("/");
    // console.log("pathList.slice(0,index)", pathList.slice(0, index));
    fs.stat(currentPath, function (err) {
      if (err) {
        fs.mkdir(currentPath, make);
        console.log({ currentPath });
        // 如果不存在,再创建  fs.mkdir(currentPath, make);
      } else {
        make();
      }
    });
  }
  make();
}
로그인 후 복사

테스트:

현재 오류는 보고되지 않습니다

mkdir("a/b/c/d", function (err) {
  if (err) console.log(err);
   console.log("success...");
});
로그인 후 복사

인쇄 효과

Nodejs 파일 모듈의 fs.mkdir 및 fs.rmdir에 대한 간략한 토론

Nodejs 파일 모듈의 fs.mkdir 및 fs.rmdir에 대한 간략한 토론

for 루프 + 대기 버전

구현 아이디어

  • '/'를 기준으로 해당 배열로 경로를 잘라내고 for 루프로 배열을 순회합니다

  • existSync() for 루프에서는 동기식 방법을 사용하여 디렉터리가 존재하는지 감지합니다.

 디렉토리가 있으면 true를 반환하고, 디렉터리가 없으면 false를 반환합니다. 3. fs.mkdir(currentPath)이 없습니다

구현 코드

const fs = require("fs").promises; //node11后可以直接.promises
const { existsSync } = require("fs");
async function mkdir(pathStr, cb) {
  let pathList = pathStr.split("/");
  for (let i = 1; i <= pathList.length; i++) {
    let currentPath = pathList.slice(0, i).join("/");
    if (!existsSync(currentPath)) {
      await fs.mkdir(currentPath);
    }
  }
}
로그인 후 복사

이 호출은 재귀적으로 then 체인 호출을 호출합니다

mkdir("a/b/c/d")
  .then(() => {
    console.log("创建成功");
  })
  .catch((err) => {
    console.log(err);
  });
로그인 후 복사

인쇄 효과

Nodejs 파일 모듈의 fs.mkdir 및 fs.rmdir에 대한 간략한 토론

Nodejs 파일 모듈의 fs.mkdir 및 fs.rmdir에 대한 간략한 토론

fs.rmdir 파일 디렉토리 삭제

사례 사용

하위 디렉터리가 있는 디렉터리에서 fs.rmdir을 직접 삭제

const fs = require("fs");
const path = require("path");
fs.rmdir("a", function (err) {
  console.log(err);//会报错
});
로그인 후 복사

사용 결과(오류 보고)

Nodejs 파일 모듈의 fs.mkdir 및 fs.rmdir에 대한 간략한 토론

fs.rmdir 향상된 버전

직렬 버전

아이디어

  • fs.stat는 파일의 특정 정보를 반환합니다: 파일 상태 파일 정보, 수정 시간, 생성 시간, 디렉터리 상태 fs.stat 콜백의 두 번째 매개 변수는 파일 개체, 개체 메서드를 가져오는 것입니다: isFile, isDirectory

  • isFile 직접 fs.unlink(dir, cb); 현재 파일 삭제

  • isDirectory는 fs.readdir을 호출하여 하위 디렉터리 배열을 반환합니다.

  • map은 하위 디렉터리 배열 및 상위 파일 이름 + 하위 파일 이름을 순회합니다. splicing path.join(dir, item))

  • 스플라이싱된 경로 배열에서 차례로 자신을 재귀적으로 호출합니다

  • 모든 하위 디렉터리를 삭제한 다음 자체 삭제

코드 구현

function rmdir(dir, cb) {
  fs.stat(dir, function (err, statObj) {
    // 1:判断dir的文件信息 statObj 是目录还是 文件
    if (statObj.isDirectory()) {
      // 1.1 读取文件夹fs.readdir 回调函数 里可以拿到文件夹读取结果
      fs.readdir(dir, function (err, dirs) {
        //   遍历 文件夹中文件,path 拼接 父文件名称+ 子文件名称
        dirs = dirs.map((item) => path.join(dir, item));
        // 把目录里面 的拿出来,一个删除后 删除下一个
        let index = 0;
        function step() {
          // 将子文件都删除完后,删除自己
          if (index === dirs.length) return fs.rmdir(dir, cb);
          //删除第一个成功后 继续调用rmdir 删除下一个子文件,直到index===dirs.length 时 删除自己
          rmdir(dirs[index++], step);
        }
        step();
      });
    } else {
      // 1.2 dir是文件 直接删除 用fs.unlink
      fs.unlink(dir, cb);
    }
  });
}
로그인 후 복사

Test

rmdir("a", function () {
  console.log("删除成功");
});
로그인 후 복사

실행 결과

Nodejs 파일 모듈의 fs.mkdir 및 fs.rmdir에 대한 간략한 토론

병렬 버전

코드 구현

const fs = require("fs").promises;
const path = require("path");
async function rmdir(dir) {
  let statObj = await fs.stat(dir);
  if (statObj.isDirectory) {
    let dirs = await fs.readdir(dir);
    await Promise.all(dirs.map((item) => rmdir(path.join(dir, item))));
    await fs.rmdir(dir);
  } else {
    return fs.unlink(dir);
  }
}
로그인 후 복사

Call

rmdir("a").then(() => {
  console.log("并行删除成功");
});
로그인 후 복사

실행 결과

Nodejs 파일 모듈의 fs.mkdir 및 fs.rmdir에 대한 간략한 토론

병렬과 직렬의 차이점

직렬로의 이해 위의 내용에 따른 단일 스레드만 하나의 실행이 완료된 후 다음 실행을 실행할 수 있습니다. 병렬, 비동기 실행, 서로 종속성 없음 그러면 후자가 전자보다 더 효율적일 것입니다

파일 디렉터리 작업의 본질

  • 파일 디렉터리의 본질: 트리 구조의 데이터입니다

  • 파일 디렉터리의 작업은 트리를 기반으로 합니다. 구조화된 데이터 연산

  • 다음에 쓸 수 있도록 공백 남겨두기 트리 구조 이해하기

더 많은 프로그래밍 관련 지식을 보려면 프로그래밍 교육을 방문하세요! !

위 내용은 Nodejs 파일 모듈의 fs.mkdir 및 fs.rmdir에 대한 간략한 토론의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

Video Face Swap

Video Face Swap

완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

Golang을 사용하여 파일을 안전하게 읽고 쓰는 방법은 무엇입니까? Golang을 사용하여 파일을 안전하게 읽고 쓰는 방법은 무엇입니까? Jun 06, 2024 pm 05:14 PM

Go에서는 안전하게 파일을 읽고 쓰는 것이 중요합니다. 지침은 다음과 같습니다. 파일 권한 확인 지연을 사용하여 파일 닫기 파일 경로 유효성 검사 컨텍스트 시간 초과 사용 다음 지침을 따르면 데이터 보안과 애플리케이션의 견고성이 보장됩니다.

nodejs는 백엔드 프레임워크인가요? nodejs는 백엔드 프레임워크인가요? Apr 21, 2024 am 05:09 AM

Node.js는 고성능, 확장성, 크로스 플랫폼 지원, 풍부한 생태계, 개발 용이성 등의 기능을 제공하므로 백엔드 프레임워크로 사용할 수 있습니다.

nodejs를 mysql 데이터베이스에 연결하는 방법 nodejs를 mysql 데이터베이스에 연결하는 방법 Apr 21, 2024 am 06:13 AM

MySQL 데이터베이스에 연결하려면 다음 단계를 따라야 합니다. mysql2 드라이버를 설치합니다. mysql2.createConnection()을 사용하여 호스트 주소, 포트, 사용자 이름, 비밀번호 및 데이터베이스 이름이 포함된 연결 개체를 만듭니다. 쿼리를 수행하려면 Connection.query()를 사용하세요. 마지막으로 Connection.end()를 사용하여 연결을 종료합니다.

nodejs의 전역 변수는 무엇입니까 nodejs의 전역 변수는 무엇입니까 Apr 21, 2024 am 04:54 AM

Node.js에는 다음과 같은 전역 변수가 존재합니다. 전역 개체: 전역 핵심 모듈: 프로세스, 콘솔, 필수 런타임 환경 변수: __dirname, __filename, __line, __column 상수: undefine, null, NaN, Infinity, -Infinity

nodejs 설치 디렉토리에 있는 npm과 npm.cmd 파일의 차이점은 무엇입니까? nodejs 설치 디렉토리에 있는 npm과 npm.cmd 파일의 차이점은 무엇입니까? Apr 21, 2024 am 05:18 AM

Node.js 설치 디렉터리에는 npm과 npm.cmd라는 두 가지 npm 관련 파일이 있습니다. 차이점은 다음과 같습니다. 확장자가 다릅니다. npm은 실행 파일이고 npm.cmd는 명령 창 바로 가기입니다. Windows 사용자: npm.cmd는 명령 프롬프트에서 사용할 수 있으며, npm은 명령줄에서만 실행할 수 있습니다. 호환성: npm.cmd는 Windows 시스템에만 해당되며 npm은 크로스 플랫폼에서 사용할 수 있습니다. 사용 권장사항: Windows 사용자는 npm.cmd를 사용하고, 기타 운영 체제는 npm을 사용합니다.

nodejs와 java 사이에 큰 차이가 있나요? nodejs와 java 사이에 큰 차이가 있나요? Apr 21, 2024 am 06:12 AM

Node.js와 Java의 주요 차이점은 디자인과 기능입니다. 이벤트 중심 대 스레드 중심: Node.js는 이벤트 중심이고 Java는 스레드 중심입니다. 단일 스레드 대 다중 스레드: Node.js는 단일 스레드 이벤트 루프를 사용하고 Java는 다중 스레드 아키텍처를 사용합니다. 런타임 환경: Node.js는 V8 JavaScript 엔진에서 실행되는 반면 Java는 JVM에서 실행됩니다. 구문: Node.js는 JavaScript 구문을 사용하고 Java는 Java 구문을 사용합니다. 목적: Node.js는 I/O 집약적인 작업에 적합한 반면, Java는 대규모 엔터프라이즈 애플리케이션에 적합합니다.

nodejs는 백엔드 개발 언어인가요? nodejs는 백엔드 개발 언어인가요? Apr 21, 2024 am 05:09 AM

예, Node.js는 백엔드 개발 언어입니다. 서버 측 비즈니스 로직 처리, 데이터베이스 연결 관리, API 제공 등 백엔드 개발에 사용됩니다.

nodejs와 java 중 어느 것을 선택해야 합니까? nodejs와 java 중 어느 것을 선택해야 합니까? Apr 21, 2024 am 04:40 AM

Node.js와 Java는 각각 웹 개발에 장단점이 있으며 선택은 프로젝트 요구 사항에 따라 다릅니다. Node.js는 실시간 애플리케이션, 신속한 개발 및 마이크로서비스 아키텍처에 탁월한 반면, Java는 엔터프라이즈급 지원, 성능 및 보안에 탁월합니다.

See all articles