-
Notifications
You must be signed in to change notification settings - Fork 0
/
main.cpp
154 lines (119 loc) · 3.89 KB
/
main.cpp
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
#include <iostream>
#include <string>
#include "FileManager.h"
#include <format>
using std::cout;
using std::endl;
using std::string;
using std::cin;
using std::format;
//아스키 아트 출력용 변수
string ascii_art = "______ _ _ _____ _ \n| ___|(_)| | / __ \\| | \n| |_ _ | | ___ | / \\/| |__ __ _ _ __ __ _ ___ _ __ \n| _| | || | / _ \\ | | | '_ \\ / _` || '_ \\ / _` | / _ \\| '__|\n| | | || || __/ | \\__/\\| | | || (_| || | | || (_| || __/| | \n\\_| |_||_| \\___| \\____/|_| |_| \\__,_||_| |_| \\__, | \\___||_| \n __/ | \n |___/\n";
void draw_border() {
cout << "--------------------------------------------------------------------\n";
}
void draw_main()
{
//첫 시작화면 렌더링
draw_border();
cout << ascii_art;
cout << "간편 파일이름 변경기 v0.2" << endl;
draw_border();
}
string get_file_path(string dialog)
{
//경로 입력 저장용 임시 변수
string temp;
//입력 다이얼로그 출력
cout << dialog;
//cin 으로 받으면 공백까지 입력 받을 수 없다. getline 을 쓰면 공백을 포함해서 읽어줌.
std::getline(cin, temp);
draw_border();
return temp;
}
int main(void) {
setlocale(LC_ALL, ""); //한글 경로 읽기 위해 로케일을 해당 컴퓨터에 있는 로케일로 바꾼다. (필수)
string dir_path = "";
//첫 시작화면 렌더링
draw_main();
//경로 입력 받기
dir_path = get_file_path("폴더 경로를 입력해주세요. : ");
//파일을 다루기 위해 FileManager 객체 생성하기
FileManager fm(dir_path); //객체 생성
string oper = "";
cout << "작업하실 파일의 형태를 입력해 주세요 (f : 파일만 작업, d : 폴더만 작업, a : 모두 작업) : ";
cin >> oper;
draw_border();
FileType ft;
if (oper == "f") ft = FileType::File;
else if (oper == "d") ft = FileType::Directory;
else if (oper == "a") ft = FileType::All;
else { cout << "잘못된 입력입니다." << endl; return 0; }
if (fm.get_count(ft) != 0) {
fm.print_list(ft); //파일 리스트 출력
}
else {
cout << "No Items in Directory...";
return 0;
}
draw_border();
string mode = "";
do {
cout << "작업하실 모드를 선택해주세요 (p : 치환모드, l : 왼쪽에 문자열 삽입, r : 오른쪽에 문자열 삽입, e : 종료) : ";
cin >> mode;
cin.ignore(); //문자 한개만큼 입력버퍼 비우기
if (mode == "p") {
string find, replace;
cout << "찾을 문자열을 입력해주세요 : ";
getline(cin, find);
cout << "치환할 문자열을 입력해주세요 : ";
getline(cin, replace);
string dialog;
cout << format("해당 경로의 \"{}\" 문자를 찾아서 \"{}\" (으)로 치환해서 이름을 변경합니다. \n정말 수행하시겠습니까 ? (y/n) : ", find, replace);
cin >> dialog;
if (dialog == "y") {
fm.replace_name(ft, find, replace);
draw_border();
}
else {
printf("사용자에 의해 작업이 취소되었습니다.\n");
}
}
else if (mode == "e") {
cout << "사용자에 의해 작업이 종료되었습니다.";
}
else if (mode == "l") {
string insert_str, dialog;
cout << "삽입할 문자열을 입력해주세요 : ";
getline(cin, insert_str);
cout << format("해당 경로의 파일 이름 앞에 \"{}\" 을 모두 삽입합니다. \n정말 수행하시겠습니까 ? (y/n) : ", insert_str);
cin >> dialog;
if (dialog == "y") {
fm.insert_left_name(ft, insert_str);
draw_border();
}
else {
printf("사용자에 의해 작업이 취소되었습니다.\n");
}
}
else if (mode == "r") {
string insert_str, dialog;
cout << "삽입할 문자열을 입력해주세요 : ";
getline(cin, insert_str);
cout << format("해당 경로의 파일 이름 뒤에 \"{}\" 을 모두 삽입합니다. \n정말 수행하시겠습니까 ? (y/n) : ", insert_str);
cin >> dialog;
if (dialog == "y") {
fm.insert_right_name(ft, insert_str);
draw_border();
}
else {
printf("사용자에 의해 작업이 취소되었습니다.\n");
}
}
else {
printf("올바른 모드가 아닙니다.");
}
} while (mode != "e");
getchar(); //프로그램 바로 종료되지 않게 하기
return 0;
}