C++파일입출력 클래스의 open함수에 파일 이름을 쓸때 궁금한 점이 생겼습니다

#include <fstream>

int main()
{
    ifstream a;

    a.open("Hello", ios::in);
    a.close();

    a.open("Hello.txt", ios::in);
    a.close();

    return 0;
}

다음과 같이 했을때 ifstream클래스의 멤버함수인 open함수의 첫번째 매개변수로

파일의 이름을 보내야 하는데요

그냥 Hello만 쓸때와 Hello.txt라고 쓸때가 차이가 있나요?

그리고 제 생각에는 확장자를 쓰지 않아도 된다고 생각하는데 잘못된 생각인가요?

그렇게 생각한 이유는 어차피 C++에서 파일을 오픈할때

ios::binary와 결합하지 않은 상태로 그냥 ios::in과 같이 모드만 쓰면 "텍스트 파일"로 오픈하고

ios::in | ios::binary와 같이 |연산자로 결합을 하면 "이진 파일"로 오픈하는 것이기 때문에

그냥 파일의 이름만 쓰고 .txt는 생략해도 되는지 궁금해 졌습니다

그리고 생성된 메모장을 보는데

image

다음 이미지와 같이 확장자가 붙은것은 뭔가 메모장 같은 느낌의 그림이고

그렇지 않은건 뭔가 부족한 느낌이여서 역시 open함수의 첫번째 인자에 파일의 이름만 쓰는것과

확장자와 같이 쓰는것이 차이가 있는 건가요?

안녕하세요.

확장자는 파일의 이름의 일부입니다.
그 역할은 파일을 사용하는 응용프로그램을 자동적으로 연결해주기 위해서입니다.

메모장같은 그림이 나타난 것은 확장자를 감지해서 응용프로그램에서 그것을 자동으로 처리해주기 때문이죠.

vscode나 윈도우 탐색기에서 파일의 그림이나 연결되는 응용프로그램이 자동적으로 바뀌는 것이 그러한 원리입니다.

따라서 파일을 만드실 때 확장자가 없어도 상관은 없습니다만,
어떠한 응용프로그램을 개발하셔서 파일을 자동으로 연결해야한다면, (예를 들어 hwp파일을 열면 자동으로 한글 프로그램이 실행되지요.) 확장자를 입력하여 그 기능을 이용해야합니다.

간단히 정리하자면

파일의 이름에 확장자가 없어도 되지만, 확장자는 그 파일이 어떤 응용프로그램과 연관이 있는지 알려주는 이정표입니다.

1 Like

그렇군요 알려주셔서 감사합니다