다시 오신 걸 환영해요
이번 강의에서는 파일 접근에 관해 다크에게 배울게요
네 디스크에 있는 파일은 이름이 있고 파일의 이름을 짓는 규칙은
운영 체제에 의해 결정되죠
프로그램 운영 OS에 따라 이름을 조정해야
할 수도 있어요
네 네 실제 디렉터리 구조도 다를
수 있어요
앞으로 슬래셔를 쓰거나 뒤로 슬래시를 쓰면 이걸 프로그램에서
조정해야 해요
하지만 대부분의 경우names는 비교적 같은
이름 규칙을 갖고 있어요
하지만 조정해야 할 수도 있어요
프로그램이 참조하는 파일 THRa 파일 포인터 또는 스트림 포인터죠
네 파일에만 적용되는 게 아니니까요 앞서
언급했듯이 표준 IO 기능은 모든 장치에서 작동합니다
파일 포인터라고 하는데 사실 스트림 포인터라고
불러야 해요
여러분은 프로그램이 실행 중일 때 파일 포인터를 프로그램적으로
연결하죠
네 그래서 결국 프로그램 안에 포인터를 만들게
되죠 파일 형식이 될 겁니다 여러분이 읽고 쓸 때 그 파일을 나타내는
거죠
네 네 이 파일 포인터를 좀 더 효과적으로 이용해 파일을 가리킵니다 이름과는
반대로요 이름은 좀 다를 수 있거든요
포인터는 실제로 가리키는 걸 나타내요
포인터를 재사용해 다른 경우에 다른 파일을
가리킬 수 있어요 파일 이름으로 표시돼 있죠
파일 포인터는 스트림을 나타내는 구조형 파일을 가리키죠
파일 구조를 살펴보고 그 안에 있는 모든
걸 볼 수 있어요
하지만 파일을 읽거나 쓰거나 업데이트하길 원하는
것과 같은 정보를 담고 있죠 데이터를 저장하는 메모리 버퍼의
주소나 다음 작업을 위한 파일의 현재 위치에 대한
포인터도요
이 위치가 중요하다고 말씀드렸죠 쓰기와
읽기를 하는 곳이니까요
이 모든 정보를 입력과 출력 파일 작업을 이용해 이 모든 정보를
구조 내에서 설정할 수 있어요
입력 OUTPUT 파일 연산이죠 파일을 열면 읽거나
쓰기를 원하는지를 지정해요
네 그리고 다른 메서드를 이용해 현재 위치를 바꿀 수 있어요
나중에 얘기할 탐색 같은 메서드요
네 프로그램에서 여러 개의 파일을 동시 사용하고 싶다면 각각의
파일에 대해 별도의 파일 포인터를 만들어야 해요
다른 시간에 읽고 쓰는 경우에만 파일포인터를 재사용할
수 있어요
오픈 타임에 오픈 파일의 수에는 한계가 있어요
네 한계점을 보세요 표준 IO엔 상수가 정의돼
있죠 f 열고 최대로요 모든 건 역시 어떤 운영 체제에 실행되느냐에
달렸습니다
하지만 한 번에 너무 많은 파일을 만드는 건 좋지 않죠
네 파일을 작성하고 읽으려면 비용이 많이 들어요 하드 드라이브에 작성해야
하니까요
네 메모리 작성만큼 빠르지 않아서
시간이 걸리고 프로그램이 덜 반응할 수 있어요 그래서
10파일을 열고 동시에 10개의
파일을 작성해선 안 되죠
파일을 열려면 이걸 먼저 해야 해요
읽고 쓰기 전에요
그래서 특정 외부 파일 이름과 전체 최종 포인터를
연결하는 게 좋습니다 파일 열기라는 프로세스를 통해서요
파일을 열고 보는 방법은 f open function을 호출하는 거예요
읽기와 쓰기에 사용할 수 있는 파일포인터를
반환하죠
파일 포인터는 디스크에 있는 특정
외부 파일을 가리키죠
F 열기는 파일의 이름을 취하고요
읽고 쓰기를 하기 전에 해야 하는 거죠
보통 첫 수술이잖아요
대부분의 함수처럼 모두 표준으로 정의되죠 H요
F 공개 전화의 정의는 이거예요
returnvalue는 파일 포인터이고 전부
대문자로 되어 있어요 파일 구조죠
모두 대문자 파일이죠
네 그러면 몇 가지 매개 변수가 필요한 걸 알 수 있죠 이름과 모드가
필요해요 제한은 신경 쓰지 마세요 그냥 C11과 관련된 거니까요
캐릭터 포인터를 이름과 모드로 만들어주죠
네 네 이 함수의 첫 번째 인수는 파일 이름인 문자열의
포인터입니다 그래서 큰따옴표 안에 있게 됩니다
네 이름을 명시적으로 명시하거나 문자열 주소를 포함하는 문자 포인터를
사용할 수 있습니다
네 네 문자열을 생성해 입력할 수도 있고 리터럴 텍스트에
할당해 함수에 문자열을 전달할 수도 있고
함수 호출 안에 큰따옴표를 넣을 수도 있어요
네 사용자로부터 입력값으로 명령줄을 통해 파일
이름을 얻을 수도 있고 상수로 정의할 수도 있어요
네 네 늘 같은 파일을 읽고 있고 이름이
상관없다면 그냥 상수로 참조하세요
네 프로그램이 좀 더 유동적이면 읽거나 쓰기에 대한 입력을 사용자로부터
받을 수 있어요
f 오픈 기능에 대한 두 번째 인수는 파일 모드를 나타내는
문자열이에요
네 파일로 뭘 하고 싶은지 구체적으로 지정했어요
파일을 읽거나 파일을 쓰거나 추가하길 원하거나요
네 파일 모드 사양은 큰따옴표 사이의
문자열이죠 나중에 많이 사용하게 될 것들을
보여드릴게요
f openis 호출이 성공적이라면 파일 포인터를
대문자로 반환할 거예요
네 이 파일 포인터를 이용해 표준 IO 헤더에서 다른 입력/아웃풋
함수를 호출할 수 있어요 읽고 쓰기를 할 때 이걸 살펴볼 겁니다
포인터를 이용해서 위치를 알아낼 수 있습니다 파일에서
어디에 있는지 위치를 변경할 수 있습니다
파일이 열리지 않으면 f 열림은 null을
반환해요
네 이게 의미하는 건 읽기나 쓰기를 시작하기 전에 포인터가
null과 같지 않은지 확인하라는 거죠 확인서 하나 더 주세요
제가 언급한 파일모드예요
파일 모드는 f 오픈 콜의 순간 매개 변수예요
파일로 할 일을 지정했어요 큰따옴표
안에 다 있죠
w를 쓰면 텍스트 파일을 열어야 한다는 뜻이죠
네 네 a를 쓰면 텍스트 파일을 열어서 어텐딩을 할 수 있어요 모든
글은 파일의 끝까지 쓰입니다
r을 쓰면 읽기 위해 텍스트 파일을 열죠
거기에 플러스 요소를 더하면 존재하지 않는 파일이
생성되죠
네 w+ 파일을 열면 업데이트를 위해 열고 존재한다면 그 파일을
0으로 불러오죠 존재하지 않으면 새 파일을 만들
수도 있고요
다른 건 쓰거나 읽기가 쉽고 파일은 존재해야
해요
네 플러스도 마찬가지죠 기존 파일의 끝을 업데이트하기 위해 그걸
엽니다 존재하지 않는 파일을 생성하는 거죠
R 플러스는 업데이트 텍스트 파일을 열죠 파일을 생성하지
않을 겁니다 왜냐하면 비어있을 테니까요
R+를 보면 그냥 읽고 쓰는
거예요
다른 플러스와는 좀 다르죠 파일을 생성하는 곳에는
존재하지 않아요
작성 모드요
myfile이라는 이름을 텍스트 파일에
쓰고 싶다면요 txt는 파일 포인터를 만들 때 전부 대문자로 써요
Null로 설정하고 초기화하세요
그리고 나면 새로운 문자 포인터인 myfile
파일을 생성할 수 있어요. txt나 그걸 첫 번째 매개 변수로 통과할 수 있어요
그런 다음 f 열고 하면 되죠
F-열기 파일 이름과 큰따옴표 안의 w요 파일을 열어 파일
포인터를 반환합니다
그래서 과제 왼쪽에 P 파일이 있는 거예요
그런 다음 makesure p 파일이 null과 같지 않은지 확인해야죠
네 왜냐하면 Null이면 어떤 이유로든 열지 못하거나
파일 이름이 틀리거나 존재하지 않으면 그에 작성할 수 없으니까요 것들에 대해
쓸 수 없죠
그래서 여러분은 항상 thef를 확인하고 일부 정보를 출력해야
합니다 만약 열리지 않으면요
이 코드가 파일을 열고 myfile이라는
이름과 연동시키죠 txt with your file 포인터 fp file이요
w 모드는 파일에 쓰기만 할 수 있고 읽을 수는 없다는 뜻이에요
네 네 파일 이름이 myFile이면 그 텍스트가
존재하지 않으면 f열기 호출이 이 이름으로
새 파일을 생성해요 w 옵션으로 f열기 기능을 하죠
그래서 이전 모드에서 봤을 때 w+가 존재하지 않는 경우 파일을 생성합니다
하지만 그 파일도 0으로 자르죠
그게 W의 차이점이죠
w는 존재 안 하는 경우 생성합니다 하지만 그걸
0으로 축소하진 않죠
이게 파일을 여는 표준 방법이에요 큰따옴표
안의 w를 사용해서요
어떤 경로 사양 없이 파일 이름만 제공한다면요
이 예제에서 한 게 그거예요 경로 기억은
디렉터리 이름이죠
네 디렉터리의 이름을 제공하지 않으면 디렉터리 이름을 알려주지 않으면 그 파일이
현재 디렉터리에 있다고 추정합니다 프로그램이 실행되는 곳 어디든지요
네 네 프로그램 디렉터리가 아닌 다른
곳에서 파일을 열기 원한다면 전체 경로를 지정해야
합니다
그걸 절대적인 길이라고 하죠
네 경로가 없는 건 상대적인 경로죠 프로그램이 실행되는
곳과 관련이 있어요
네 따라서 둘 중 하나를 지정할 수 있어요 절대적인 경로와
상대적인 경로요 위치가 어디인지 알고 제대로 하는지 확인하세요
상대적인 경로는 의존적이지 않을 때 더 좋아요
누군가 그 파일을 옮겼다면 옮긴 장소에
따라 달라지지 않아요
상대적인 경로로 할 수 있어요 디렉터리로 돌아갈 수 있죠
.Shash는 프로그램이 실행되는 곳과 관련 있어요 디렉터리
몇 개만 거슬러 올라가면 돼요
네 절대 경로를 사용할 땐 C# 같은 게 되겠죠
콜론 Windows라면 프로그램 파일이요
파일이 이동해도 프로그래밍으로는 열 수 없어요
네 그래서 작성을 위한 파일을 열 때 파일 링크가
0에서 잘려서 첫 번째 작업을 위한 기존 데이터의
시작점이 되죠
네 이전에 파일에 작성한 데이터는 소실되고
작성한 연산에 의해 덮어쓰기 되죠
다시 말하지만 플러스 요소가 없으면 읽고 쓸
수 없다는 뜻이죠
이건 필기 전용이에요
W만 맞아요
W+는 읽고 쓸 수 있다는 뜻이죠
추가 모드요
덮어쓰기 보다는 기존 텍스트 파일에 추가하고 싶다면 a 모드를
지정할 수 있어요
이건 상황에 따라 달라요
이 파일은 이전에 기록된 데이터의 끝에 위치하죠
파일이 존재하지 않으면 새 걸 생성하죠
여기 예가 있어요 두 번째 매개 변수를 큰따옴표 안에 있는 것으로 바꾸기만
하면 되죠 마이파일 엔딩에 보탬이 될 거예요 알았어요
그리고 항상 null 값을 반환값으로 테스트해야
한다는 걸 잊지 마세요
ifp 파일이 null과 같지 않다면 그렇게 해야죠
네 첨부 모드에서 파일을 열면 모든 쓰기 작업이
각 쓰기 작업의 파일 데이터 끝에 있게 됩니다
모든 작업을 작성하고 파일에 데이터를 추가합니다
이 모드의 기존 콘텐츠는 업데이트할 수 없죠 끝에 있어요
읽기 모드에선 파일을 읽기 위해 열 수 있어요
린사이드의 큰따옴표를 이용하죠
읽기 전용이니 쓰지 마세요
R+를 받으면 읽고 쓸 수 있을 거예요
네 다른 호출에서는 파일 이름으로 f 열고 큰따옴표로
r을 사용합니다 파일 포인터를 반환합니다
파일도 데이터의 시작에 위치시키고요
파일을 그냥 읽는다면 이미 존재할 거예요
빈 파일로 갈 순 없어요
네 파일을 생성할 옵션이 없죠 존재하지 않아요 비어있을
것입니다 혹은 상대 파일은 null이 될 것입니다
읽기 파일을 열려고 하면 존재하지 않죠 null
포인터를 반환할 거예요
존재하는데 비어 있다면 데이터를 반환할 수 없죠
f오픈의 가치 반환은 늘 확인해야죠
다시 말하지만 중요한 건 이걸 읽는 거예요
Null 포인터라면 프로그램이 중단되고 안 좋은
일이 생길 테니까요
파일 이름을 바꾸는 거죠
파일 여는 법을 알았네요
파일을 여는 건 퍼스트오퍼레이션입니다 파일의
모드와 이름을 지정하죠
그럼 파일포인터를 돌려주는데 그걸로
다른 작업을 할 수 있죠
파일의 이름을 다시 짓는 건 중요해요
아주 쉬워요
이름 바꾸기 기능을 사용하세요
옛 이름과 새 이름을 상수 문자 포인터로 하고
int를 리턴하죠
네 네 반환되는 정수는 0입니다 이름 변경이 성공적이면
0이고 그렇지 않으면 논-0입니다
파일은 개명할 때 열리면 안 돼요
안 그러면 실패할 겁니다 사용 중이니까요 사용 중일 땐 파일
이름을 다시 지을 수 없어요
네 여기서 할 수 있는 건 이름을 다시 짓고 이전 파일 이름과 새 파일 이름을
전달하는 거죠
이 예제에선 윈도우의 파일에 대한 경로를 이용하고 있어요
이건 윈도우즈예요 콜론이 보이거든요
더백슬래시가 두 번 나오네요
왜냐하면 더백슬래시는 C의 특별한 캐릭터거든요
백슬래시 n은 라인 피드백이에요
백슬래시 r은 캐리지 리턴이죠
백슬래시는 특별 효과가 있어요
네 따라서 디렉터리에서 경로를 위해 백슬래시를 사용하려면 Windows가
하는 것처럼요 그 중 두 개를 제공해야 하죠
마이파일로 이름을 바꿨죠 임시 디렉터리를 찾아볼게요
내 파일 밑조사경으로 이름을 바꾸죠 디렉터리에 문자를 보내죠
그게 1이 되지 않으면 실패할 거예요
실패를 알리는 output을 출력하죠
안 그러면 출력 성공이에요
myfile의 thename을 바꿀 거예요 임시 디렉터리의 txt를 파일 복사본으로 보낼 수 있죠
파일 경로가 부정확하면 파일이 존재하지 않아요 다시
이름을 붙일 수 없죠
파일을 닫을 수도 있어요 파일을 열 때마다 이걸 하고 싶죠
네 파일 작업이 끝나면 운영 체제에
파일을 풀어달라고 하는 거죠
열 수 있는 파일이 제한돼
있다는 걸 기억하세요
f 닫고 기능을 호출하면 돼요
F클로드는 파일포인터를 인수로 받아들여요
명심해요, 파일은 파일을 나타내요
eof를 반환하죠
Eof는 int예요
오류가 발생하면 eof를 반환하죠
Eof는 파일의 끝에 있는 특별한 캐릭터예요
표준형으로 정의되죠 정수가 마이너스죠
보통 마이너스 1에 해당하죠
F클로스가 성공하면 0으로 돌아가죠
실패했는지 확인해 보세요
네 F클로즈라고 하고 포인터에 패스하세요 포인터를 null로
설정하면 f 클로즈를 호출한 결과 포인터와 p 파일, 물리
파일 사이의 연결이 끊어지게 됩니다
P 파일은 읽기, 쓰기, 덧붙이기, 이름을 바꾸기
위한 파일에 접근하는 데 사용될 수 없죠
네 네 파일이 작성된 경우 아웃풋 버퍼의 현재 내용도 파일에
작성됩니다 데이터가 분실되지 않도록요
네 데이터 무결성에 문제가 없죠 다른 스레드로
작성된다면 파일을 닫지 않을 겁니다
실도 안전하고요
스레드 얘기는 안 했죠 좀 더 진보된 개념이에요
하지만 프로그램에서 다중 엑스커션 포인트를 설정할 수 있죠
네 사용이 끝나자마자 파일을 닫는 건 좋은 프로그래밍
연습입니다 사용이 끝나면 메모리를 자유롭게 하는
프로그래밍 연습인 것처럼요 사건 종결도 마찬가지입니다
출력 데이터 손실을 막아주죠
네 이름을 바꾸거나 삭제하기 전에 파일을
닫아야 하고요 닫아야 해요 열 수 없어요
파일을 삭제하는 건 어때요?
제거 기능을 호출하는 파일을 삭제할 수 있어요
이것도 표준화에서 선언되죠 H요
모든 파일 작업은 표준으로 처리돼요 그렇군요
네 원하면 언제든 이 헤더 파일을 볼 수 있어요
C# 헤더 파일이 설치된 곳에요
파일의 이름을 제거하라고 하세요
여기선 파일 포인터를 사용하지 않아도 돼요
파일이 열리지 않아도 제거할
수 있으니까요
네 이름 바꾸기도 마찬가지죠 파일이 열리지 않기를 바라니까요 이름 바꾸기나 제거는
실패할 테니까요 따라서 파일 바꾸기는
마이파일이라는 파일을 지울 거예요 현재 디렉터리의
메시지예요
상대적인 경로를 제공하죠
프로그램이 실행하는 그 필름을 찾을 거예요
그렇지 않다면 토프로바이드를 절대적으로 개발해야 해요
삭제할 때 파일을 열 수 없어요 이름 바꾸기처럼요
항상 파일을 삭제하는 작업을 다시 한 번 확인해야 해요
안 그러면 시스템이 망가질 수 있어요
삭제는 아주 비싸고 위험한 작업이에요
파일을 삭제하면 문제가 생길 수 있어요
그러니 조심하세요
네 이번 강의에서는 모든 정보가 파일 접근과 관련된 내용이었습니다
파일을 열어서 읽고 쓰기 전에 파일을 열 수 있는
방법과 파일을 삭제하고 이름을 바꾸고 닫는 방법과 관련된 내용들이었죠
모든 게 파일 포인터에 근거하죠
그러니 파일 포인터와 그 구조를 이해하세요
꽤 유용하죠
표준 io 헤더에는 훌륭한 정보가 포함되어 있어요.
네 다음 강의에서는 텍스트 파일을 읽고
쓰는 방법에 대해 이야기하겠습니다. 데이터를 추가하거나 읽는 방법에 대해서도요.
고마워요 도움이 됐으면 좋겠네요