@@ -82,7 +82,17 @@ export function createProblem(context: vscode.ExtensionContext) {
8282 vscode . workspace . workspaceFolders ! [ 0 ] . uri . fsPath ,
8383 folderName
8484 ) ;
85- fs . mkdirSync ( folderPath ) ;
85+
86+ // 1. 폴더 생성 (이미 존재해도 계속 진행)
87+ try {
88+ fs . mkdirSync ( folderPath ) ;
89+ } catch ( error ) {
90+ if ( error instanceof Error && ( error as any ) . code !== "EEXIST" ) {
91+ // EEXIST가 아닌 다른 에러는 처리
92+ throw error ;
93+ }
94+ // 폴더가 이미 존재하는 경우는 무시하고 계속 진행
95+ }
8696
8797 // 파일명 생성
8898 let fileName = "" ;
@@ -106,24 +116,82 @@ export function createProblem(context: vscode.ExtensionContext) {
106116 readme
107117 ) ;
108118
109- // README.md 파일 내용
110- const readmeContent = `# ${ problemNumber } 번: ${ problemName } - <img src="${
111- tier . svg
112- } " style="height:20px" /> ${
113- tier . name
114- } \n\n<!-- performance -->\n\n<!-- 문제 제출 후 깃허브에 푸시를 했을 때 제출한 코드의 성능이 입력될 공간입니다.-->\n\n<!-- end -->\n\n## 문제\n\n[문제 링크](https://boj.kr/${ problemNumber } )\n\n${ cleanHtmlContent (
115- sp . description
116- ) } \n\n## 입력\n\n${ cleanHtmlContent (
117- sp . input
118- ) } \n\n## 출력\n\n${ cleanHtmlContent (
119- sp . output
120- ) } \n\n## 소스코드\n\n[소스코드 보기](${ fileName . replace ( / / g, "%20" ) } )`;
121- const encoder = new TextEncoder ( ) ;
122- const readmeData = encoder . encode ( readmeContent ) ;
123-
124- // 파일 생성
125- await vscode . workspace . fs . writeFile ( fnUri , new Uint8Array ( ) ) ;
126- await vscode . workspace . fs . writeFile ( readmeUri , readmeData ) ;
119+ // 2. 코드 파일 생성
120+ try {
121+ // 파일이 이미 존재하는지 확인
122+ let fileExists = false ;
123+ try {
124+ await vscode . workspace . fs . stat ( fnUri ) ;
125+ fileExists = true ;
126+ } catch {
127+ // 파일이 존재하지 않으면 계속 진행
128+ }
129+
130+ if ( fileExists ) {
131+ // 파일이 이미 존재하는 경우
132+ const action = await vscode . window . showWarningMessage (
133+ `'${ fileName } ' 파일이 이미 존재합니다.` ,
134+ "기존 파일로 이동" ,
135+ "덮어쓰기" ,
136+ "취소"
137+ ) ;
138+
139+ if ( action === "기존 파일로 이동" ) {
140+ // 기존 파일을 열고 문제 보기만 실행
141+ const document = await vscode . workspace . openTextDocument ( fnUri ) ;
142+ await vscode . window . showTextDocument ( document , {
143+ viewColumn : vscode . ViewColumn . One ,
144+ } ) ;
145+
146+ vscode . window . showInformationMessage (
147+ `기존 '${ fileName } ' 파일로 이동했습니다.`
148+ ) ;
149+
150+ showProblem ( problemNumber , context ) ;
151+ return ;
152+ } else if ( action === "덮어쓰기" ) {
153+ // 덮어쓰기 진행
154+ await vscode . workspace . fs . writeFile ( fnUri , new Uint8Array ( ) ) ;
155+ } else {
156+ // 취소
157+ return ;
158+ }
159+ } else {
160+ // 새 파일 생성
161+ await vscode . workspace . fs . writeFile ( fnUri , new Uint8Array ( ) ) ;
162+ }
163+ } catch ( error ) {
164+ vscode . window . showErrorMessage ( `'${ fileName } ' 파일 생성 중 오류가 발생했습니다.` ) ;
165+ console . log ( error ) ;
166+ return ;
167+ }
168+
169+ // 3. README 파일 생성 (이미 존재하면 덮어쓰지 않음)
170+ try {
171+ try {
172+ await vscode . workspace . fs . stat ( readmeUri ) ;
173+ // README 파일이 이미 존재하는 경우는 덮어쓰지 않음
174+ } catch {
175+ // README 파일이 존재하지 않으면 생성
176+ const readmeContent = `# ${ problemNumber } 번: ${ problemName } - <img src="${
177+ tier . svg
178+ } " style="height:20px" /> ${
179+ tier . name
180+ } \n\n<!-- performance -->\n\n<!-- 문제 제출 후 깃허브에 푸시를 했을 때 제출한 코드의 성능이 입력될 공간입니다.-->\n\n<!-- end -->\n\n## 문제\n\n[문제 링크](https://boj.kr/${ problemNumber } )\n\n${ cleanHtmlContent (
181+ sp . description
182+ ) } \n\n## 입력\n\n${ cleanHtmlContent (
183+ sp . input
184+ ) } \n\n## 출력\n\n${ cleanHtmlContent (
185+ sp . output
186+ ) } \n\n## 소스코드\n\n[소스코드 보기](${ fileName . replace ( / / g, "%20" ) } )`;
187+ const encoder = new TextEncoder ( ) ;
188+ const readmeData = encoder . encode ( readmeContent ) ;
189+ await vscode . workspace . fs . writeFile ( readmeUri , readmeData ) ;
190+ }
191+ } catch ( error ) {
192+ // README 파일 생성 실패는 경고만 표시하고 계속 진행
193+ console . log ( "README 파일 생성 실패:" , error ) ;
194+ }
127195
128196 // 왼쪽 분할 화면에 텍스트 에디터를 열기
129197 const document = await vscode . workspace . openTextDocument ( fnUri ) ;
@@ -139,13 +207,13 @@ export function createProblem(context: vscode.ExtensionContext) {
139207 showProblem ( problemNumber , context ) ;
140208 headerComment ( problemNumber ) ;
141209 } catch ( error ) {
142- if ( error instanceof Error && ( error as any ) . code === "EEXIST" ) {
143- vscode . window . showErrorMessage ( "이미 해당 문제의 폴더가 존재합니다." ) ;
144- } else if (
210+ if (
145211 error instanceof Error &&
146212 ( error as any ) . code === "ERR_BAD_REQUEST"
147213 ) {
148214 vscode . window . showErrorMessage ( "문제를 찾을 수 없습니다." ) ;
215+ } else {
216+ vscode . window . showErrorMessage ( "파일 생성 중 오류가 발생했습니다." ) ;
149217 }
150218 console . log ( error ) ;
151219 return ;
0 commit comments