본문 바로가기
바닐라코딩 사전학습/추가공부 및 부가설명

no such file or directory 에러

by 꼬마보노 2022. 1. 6.

VS code로 작업을 하다 no such file or directory 에러가 발생하였다.

const fs = require('fs');
let input = fs.readFileSync('./input.txt', 'utf8');
console.log(input);

이 에러가 발생한 시점은 아래의 이미지에서 BOJ탐색기에 inoutExample 폴더를 생성하고 BOJ탐색기에 직접 존재하던 input.js와 input.txt파일을 inoutExample폴더에 옮기면서 발생하였다. 분명 같은 폴더에 있음에도 오류가 발생하였다.

구글링을 해본 결과 

 

 

  1. 작업영역을 추가/변경 (import os, os.getcwd) - typescript 필요
  2. 오타수정

크게 두가지의 방법이 나와있었다. 그러나 내가 발생한 에러의 경우에는 위의 방법으로는 해결되지 않았다.

그러다 하단의 콘솔창을 보게 되었는데 파일을 inoutExample폴더에 옮겼음에도 불구하고 

C:\Users\BONO\Documents\GitHub\BOJ>

이와같이 BOJ폴더에 위치가 잡혀있었다. 혹시나 해서 readFileSync의 파일경로를 다시 지정해보았다.

const fs = require('fs');
let input = fs.readFileSync('./inoutExample/input.txt', 'utf8');

위와같이 파일경로를 지정해주니 정상적으로 input.txt파일을 찾아서 읽을 수 있었다.

왜 이런 현상이 발생했는지 예상해보면

  1. 파일을 inoutExample 폴더에 옮겼음에도 불구하고 탐색기 UI에서만 그렇게 보일 뿐, 실제로는 옮겨지지 않았다.
  2. 파일은 옮겨졌지만 프로젝트의 경로가 BOJ로 잡혀있어서 경로설정이 잘못되었다.

두가지로 생각해 볼 수 있다.

./은 현재폴더를 가리키므로 input.js는 BOJ폴더에 그대로 들어있다는 것을 알수있다.

이를 뒷받침해주는 것이, BOJ폴더에 input.txt를 다시 옮겨주면 ./input.txt로 경로설정해도 에러가 발생하지 않는다.

 

그러나 1번의 이유 또한 정확하지는 않은 것이, 출력창에서는 분명 

[Running] node "c:\Users\BONO\Documents\GitHub\BOJ\inoutExample\input.js"
 
위와 같이 input.js가 inoutExample폴더에 들어있는 것으로 나오기 떄문이다...

 

또한'./input.txt'를 그대로 쓰면서 vscode상의 환경설정에서 설정하는 방법이 있나 찾아봤지만 해당 방법은 찾아볼 수 없었다..

찾게되면 이 글을 업데이트 하자.

 

22.1.6 추가

생각해 본 결과, input.js과 input.txt파일은 inoutExample폴더에 들어가 있지만 작업영역 자체는 BOJ로 잡히는 것 같다.

따라서 경로를 입력하는 ./의 경우에도 현재폴더인 BOJ를 가리키는 것이다.