관리 메뉴

History

[c언어] 파일 경로에서 파일 이름만 가져오기 본문

C,C++/개념 실습 프로그래밍

[c언어] 파일 경로에서 파일 이름만 가져오기

luckybee 2022. 10. 3. 17:15
728x90
반응형
"C:\\Users\\Desktop\\c 공부\\연결리스트\\linkedlist.c"

현재 내 컴퓨터에 linkedlist.c라는 파일이 위 경로에 있다. 여기서 파일 이름만 가져오려고 하면 어떻게 해야 할까?

 

코드는 아래와 같다.

#include<stdio.h>
#pragma warning(disable:4996)


int main()
{
	char path[200]="C:\\Users\\Desktop\\c 공부\\연결리스트\\linkedlist.c";
	char file_name[128];

	int last_pos=0; // 가장 끝에있는 \\의 위치를 구하기 위해
	int i;
	for ( i = 0; path[i]; i++){  //경로가 끝날 때까지
		if (path[i]=='\\'){   // \\를 만났다면
			last_pos = i + 1;  //last_pos에 \\가 있는 자리에서 +1을 해준다 그럼 last_pos의 시작은 파일 이름이다.
		}
	}
	for ( i = last_pos; path[i]; i++){
		file_name[i - last_pos] = path[i];  //파일 이름을 문자 한개씩 복사한다.
	}
	file_name[i - last_pos] = 0;  //마지막엔 null값을 대입
	printf("파일명: %s", file_name);  //출력
	return 0;
}

그럼 위 코드에서 파일 이름 가져오는 부분을 함수로 따로 빼서 작성하도록 하겠다.

 

코드는 아래와 같다.

#include<stdio.h>
#pragma warning(disable:4996)


void GetFileName(char *a_path, char* a_file_name)
{
	int last_pos = 0;
	int i;
	for (i = 0; a_path[i]; i++) {
		if (a_path[i] == '\\') {
			last_pos = i + 1;
		}
	}
	for (i = last_pos; a_path[i]; i++) {
		a_file_name[i - last_pos] = a_path[i];
	}
	a_file_name[i - last_pos] = 0;

}


int main()
{
	char path[200]="C:\\Users\\Desktop\\c 공부\\연결리스트\\linkedlist.c";
	char file_name[128];
	GetFileName(path, file_name);
	printf("파일명: %s", file_name);
	return 0;
}

 

함수 부분을 포인터 표기 형식으로 바꾸면 아래와 같다. 

 

#include<stdio.h>
#pragma warning(disable:4996)


void GetFileName(const char *ap_path, char* ap_file_name)
{
	const char* p = ap_path;   //경로 백업
	const char* last_pos = NULL; // \\의 위치를 담을 변수
	
	while (*p){   //문자열의 끝이 NULL일 때 까지
		if (*p == '\\') { // \\을 찾으면 
			last_pos = p; // 위치 대입
		}
		p++;   //문자 주소를 계속 ++
	}
	if (last_pos){  // \\가 있었으면 
		p = last_pos + 1;  // +1을 하여 파일명이 시작주소가 되게한다.
	}else{  // \\이 없었으면
		p = ap_path;  //그냥 파일명이다
	}
	
	while (*p){
		*ap_file_name++ = *p++;  //문자 한개씩 대입
	}
	*ap_file_name = 0;  //마지막 번지에는 NULL값 대입

}


int main()
{
	char path[200]="C:\\Users\\Desktop\\c 공부\\연결리스트\\linkedlist.c";
	char file_name[128];
	GetFileName(path, file_name);
	printf("파일명: %s", file_name);
	return 0;
}
728x90
반응형
Comments