Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- win32
- 정처기 독학
- 핵심 요약
- Tipsware
- 김성엽
- do it c
- 실습
- 미가공
- tips강좌
- 별찍기 기초
- ListBox
- MyTread
- C
- 마이크로소프트
- MFC 예제
- C++
- 유료강좌
- C언어
- SSG
- 포트폴리오
- 정보처리기사
- mfc 실습
- 별찍기
- 도움말
- MyThread
- Time
- 충무창업큐브
- MFC
- mysql
- linux
Archives
- Today
- Total
History
[c언어] 파일 경로에서 파일 이름만 가져오기 본문
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
반응형
'C,C++ > 개념 실습 프로그래밍' 카테고리의 다른 글
[c언어]소문자를 대문자로 바꾸는 방법 (1) | 2022.10.04 |
---|---|
[c언어]다섯 개의 정숫값을 입력받고 최댓값 구하기 (1) | 2022.10.04 |
[c언어]getchar 함수로 정숫값 입력받기 (0) | 2022.10.03 |
[c언어]getchar()함수로 문자열 입력받기 (0) | 2022.10.03 |
[c언어]중복없는 난수 생성하기 method_2 (0) | 2022.09.25 |
Comments