현재 element 에서 이전 또는 이후 element 를 접근 하려고 할때 

previousSibling
nextSibling 

2가지 를 사용해서 가져오려고 하지만 html element 가 아닌 #text가 호출될때가 있다.

원인은 element 사이에 whitespace(공백)으로 인해서 값을 제대로 못가져오게 된다. 

아래 샘플 html 코드에서 현재 2번에서 3번을 접근하려고 할때

<li>
    <a id ="1" >test1</a>
    <a id ="2" >test2</a>
    <a id ="3" >test3</a>
    <a id ="4" >test4</a>
</li>

 

var temp = document.getElementById('2');
console.log(temp.nextSibling); // #text

nextSibling은 id값이 3인 element 를 접근 못하고 #text를 가져온다.

해당 문법을 정상적으로 사용하려면 아래처럼 공백을 제거해야된다.

 

<li>
  <a id ="1" >test1</a><a id ="2" >test2</a><a id ="3" >test3</a><a id ="4" >test4</a>
</li>

 

하지만 이런 방법은 좋은게 아니기 때문에 whitesapce(공백)을 무시하면서 다음 element를 접근하는 

nextElementSibling 을 사용하면 된다. 

var temp = document.getElementById('2');
console.log(temp.nextElementSibling); // <a id ="3" >test3</a>

그럼 공백이 있어도 다음 element를 접근하고

형제 엘리먼트가 더이상 없을때 null을 return한다. 

 

shelve 의 기능은 아직 커밋하고 싶지않은 파일을 임시로 별도의 공간에 저장해두는 기능이다.

commit 하기전 코드를 임시로 보관하고 다른 브런치로 전환 해야하는 상황에서 유용한 기능이다.

git에서는 stash 기능이 있고 인텔리제이는  shelve 기능이 있는데

stash 와 shelve 는 동일한 기능이다. 

stash는 git 자체적으로 동작하는 기능이고

shelve는 인텔리제이(intellij)에서 자체적으로 동작하는 기능이다.

git 의 기능을 쓸지 인텔리제이의 기능을 쓸지 차이다.

 

1. Shelve 적용 방법

Commit 창(Alt+0)에서 변경된 파일 목록에서 해당 목록에서 잠시 보류하고 싶은 파일을 선택후 

오른쪽 클릭 > Shelve Changes  또는  상단 빨간 네모칸에 있는 icon을 클릭한다.

 

 

Shelve Changes 창에서 변경된 목록중 보류할 파일들을 확인하고

Commit Message 안에 기록을 해둔다. 예)local Test 용 코드 

이후 Shelve Changes 버튼을 클릭해 Shelve 를 적용한다. 

 

shelve를 적용하면 수정된 코드는 임시 보관되고 해당 파일은 작업전 내용으로 돌아간다.

Commit 창(Alt+0)에서 Changes 목록에서 제외된다.

 

 

 

2. Unshelve 적용 방법

 

위에서 임시로 보류했던 코드를 다시 현재 코드에 적용하고 싶을땐 Unshelve(보류해제) 로 되돌리면 된다.

Commit 창(Alt+0)에서 Shelf tab 으로 간다. 

 

되돌리고 싶은 보류 파일들을 선택하고 오른쪽 클릭 > Unshelve 또는  상단 빨간 네모칸에 있는 icon을 클릭한다.

 

 

 

Unshelve Changes 창에서 보류 해제 항목을 확인후  Unshelve Changes 버튼을 클릭해 보류를 해제한다.

Commit 창(Alt+0)에서 Shelf tab 에 파일을 드래그해 Commit to (브렌치명) tab 으로 이동시켜도 동일하게 적용된다.

 

 

적용 후 Commit 창(Alt+0) 또는 해당파일에서  Shelve(보류)에 적용되었던 코드가 현재코드에 반영된걸 확인 할 수 있다. 

 

 

마지막으로 git의 stash 와 인텔리제이의 shelve 기능 차이점으로 git은 브런치마다 stash가 공유가 불가능하고 

shelve는 브런치가 변경되어도 범용적으로 재사용이 가능하다.

 

부가적인 상세 옵션 설명 및 이외 shelve 에 대한 내용은 아래 공식홈페이지를 참고

https://www.jetbrains.com/help/idea/shelving-and-unshelving-changes.html#ChList

 
 
 

'Tool > IntelliJ' 카테고리의 다른 글

Intellij 파일 검색 안됨 해결 (Excluded 해제)  (0) 2022.09.08
IntelliJ 단축키 모음  (0) 2022.09.02
InteliJ 초기화면(welcome) 설정  (0) 2022.09.02
 

안드로이드 사용자인 경우

기존 은행앱에 있는 공용인증서로 홈텍스앱에서 인증서로 사용할때

 

인증서가 안뜨는데 구글이 인증서에 대해서 앱끼리 공유가 안되도록 막아뒀기 때문이다.

그래서 은행앱에 있는 인증서를 PC로 인증서 내보내기(복사)를 하고 

다시 PC에서 홈텍스앱으로 스마트폰으로 인증서 내보내기(복사)를 하고

다시 PC에서 홈텍스앱으로 스마트폰으로 인증서 내보내기(복사)를 해야한다. 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

인텔리제이에서 파일 검색이 안되는 경우가 있다.

project 텝에서 보면 검색이 안되는 파일이 담긴 폴더는 빨간색으로 되어 있는데

폴더 마크가 제외된 상태라서 그렇다.  (Excluded) 

빨간색으로된 폴더를 제외 상태를 풀어줘야 하는데

해당 폴더 마우스 우클릭 > Mark Directory As > Not Excluded 또는 cancel Exclustion 선택하면

폴더 색상이 변하면서 파일 검색에도 적용된다.

 

 

 

 

'Tool > IntelliJ' 카테고리의 다른 글

Intellij Shelve Unshelve 기능  (0) 2022.09.23
IntelliJ 단축키 모음  (0) 2022.09.02
InteliJ 초기화면(welcome) 설정  (0) 2022.09.02

인텔리제이 윈도우 기준 단축키 모음입니다.

클릭해서 편하게 보세요.

 

 

'Tool > IntelliJ' 카테고리의 다른 글

Intellij Shelve Unshelve 기능  (0) 2022.09.23
Intellij 파일 검색 안됨 해결 (Excluded 해제)  (0) 2022.09.08
InteliJ 초기화면(welcome) 설정  (0) 2022.09.02

1.  초기화면으로 가고싶다면

단순히 선택적으로 초기화면으로 돌아가고 싶으면 

File > Close Project 를 눌러줘도 초기화면으로 돌아갈 수 있다. 

 

 

2. 실행시 마다 초기화면 설정

프로젝트를 한번 설정하면 최근 설정된 프로젝트가 열리기 때문에

여러 프로젝트를 진행시 초기화면으로 설정 가능하다.

File > Settings..  설정으로 들어간다. 단축키 (윈도우: ctrl + alt + s)

 

 

 

Appearance & Behavior > System Settings > Reopen last project on startup 체크 해제

이후 재시작하면 초기 welcome 페이지로 적용된다. 

 

 
 
 

'Tool > IntelliJ' 카테고리의 다른 글

Intellij Shelve Unshelve 기능  (0) 2022.09.23
Intellij 파일 검색 안됨 해결 (Excluded 해제)  (0) 2022.09.08
IntelliJ 단축키 모음  (0) 2022.09.02

 

jxl은 2003년 엑셀 파일까지만 지원해주기 때문에

아래 코드처럼 jxl 라이브러리 활용하여 Workbook 생성시 

import jxl.Sheet;
import jxl.Workbook;
import jxl.read.biff.BiffException;

public String inputFIle(MultipartFile xlsxFile) throws BiffException, IOException {

        Workbook wb = Workbook.getWorkbook(xlsxFile.getInputStream());  <--에러 발생지점
        Sheet sheet =  wb.getSheet(0);

 

'Unable to recognize OLE stream' 에러 발생한다면

엑셀 파일 Excel 97 - 2003 서식 파일 (*.xlt) 이 아니여서 그렇다. 

확장자 .xlsx 는 jxl 라이브러리로 엑셀 접근이 어렵다.

대체 방안1.  POI 라이브러리 활용

대체방안 2. 엑셀 다른이름으로 저장 > 파일 형식 : Excel 97 - 2003 서식 파일 (*.xlt) 선택  저장 후 재진행

 

 

파일은 그대로 남겨두고 내용만 비우고자 할때

cat /dev/null > 해당파일

실제 예) 

cat /dev/null > catalina.out

당장 파일을 삭제 할 수 없고 용량이 커서 vi로 열어서 내용을 비우기 어려운 경우

해당 방식으로 내용을 비워주면 된다.

 

 

'프로그래밍 > 리눅스(Linux)' 카테고리의 다른 글

크론탭 (crontab) 설정  (0) 2022.02.03

 

크론탭 리눅스 환경에서 특정 주기로 반복해서 동작이 필요할때 사용한다. 

java의 스케줄러,  sql event 와 유사하다.

1시간마다 또는 특정 요일에 실행시키고 싶을때 활용하면 된다.

(쓴이는 오래된 log 삭제로 디스크 용량 유지 목적으로 사용 했다.) 

우선 실행할 스크립트를 작성 했다고 가정 하고 진행한다. 

 

[chron 텝 명령어]

설정 :  crontab -e
읽기 :  crontab -l
삭제 :  crontab -r

위와 같은 형태로 크론탭(crontab) 을 설정한다.

먼저 cmd 창에 crontab -e 치면

vi 환경처럼 빈 text 작성 공간이 나오고 i 를 누르고

아래와 같은 규칙으로 작성하면 끝난다.

* * * * * sh /home/test.sh

앞에 5자리 설정값의 의미는 아래처럼 이해하면 된다.

분,시간, 일, 월, 요일
*     *    *    *    *   명령어

매일 새벽 정각 6시에 test.sh 스크립트를 실행시키려면 

예) 0 6 * * * sh /home/test.sh

처럼 작성하면 정각 새벽 6시에 실행된다.

 

[스크립트 샘플]

스크립트 작성법 모른다면 아래 내용이 샘플 참고하라

#!/bin/sd  

#--------------------#
# 주석 샘플          #
#--------------------#

find /logs/* -mtime +6 -exec rm -f {} \;              # 파일을 지울때#
find /logs/ -type d -mtime +6 -exec rm -rf {} \;    # 폴더를 지울때#

[스크립트 설명]

" #!/bin/sd "  - 맨앞에 해당 구문을 작성해야 스크립트로 동작한다.

" # ~생략~ # " - #과 # 사이는 주석으로 활용 된다.

"find"(경로를 찾는 명령어) +

"경로"(원하는 작업 경로 지정) +

"-mtime +6"(현재 시간 6일전 이전 날짜) +

+ "rm"(지운다) +

"-f "파일을 지운다. OR "-r" 파일을 지운다.

  

잘 활용해서 노가다 -> 자동화 하나라도 더 만들자

'프로그래밍 > 리눅스(Linux)' 카테고리의 다른 글

리눅스 파일 내용 삭제  (0) 2022.05.10

 

Expected a value of type 'MaterialColor?', but got one of type 'Color'

    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.black,
      ),
      home: MyHomePage(title: 'Flutter Demo Home Page'),
    );

앱 테마색상 변경시 Expected a value of type 'MaterialColor?', but got one of type 'Color' 오류가 난다면 색상의 Type이 달라서 생긴 오류입니다.

해결법 

primarySwatch: -> primaryColor: 로 변경합니다.

    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primaryColor: Colors.black,
      ),
      home: MyHomePage(title: 'Flutter Demo Home Page'),
    );

 

오류 원인

색상 Type이 달라서 발생한 오류 입니다. 

Colors.black 이후 마우스를 올려두면 색상 Type: Color 이며

오류가 발생 안하는 Green 인 경우 마우스를 올려두면 Type: MaterialColor 입니다.

primarySwatch 속성에는 MaterialColor Type 만 가능하기 때문에 Color Type인 색상을 값으로 넣었기 때문에

발생한 문제 입니다.

속성을 primaryColor 는 Color 와 MaterialColor 모두 수용 가능하기에 원하는 색상으로 사용 가능합니다.

 

 

 

1. 개인정보의 처리 목적 (‘https://yi-chi.tistory.com/’이하 ‘chyi’) 은(는) 다음의 목적을 위하여 개인정보를 처리하고 있으며, 다음의 목적 이외의 용도로는 이용하지 않습니다.

- 고객 가입의사 확인, 고객에 대한 서비스 제공에 따른 본인 식별.인증, 회원자격 유지.관리, 물품 또는 서비스 공급에 따른 금액 결제, 물품 또는 서비스의 공급.배송 등

2. 개인정보의 처리 및 보유 기간

 (‘https://yi-chi.tistory.com/’이하 ‘chyi’) 은(는) 정보주체로부터 개인정보를 수집할 때 동의 받은 개인정보 보유․이용기간 또는 법령에 따른 개인정보 보유․이용기간 내에서 개인정보를 처리․보유합니다.

② 구체적인 개인정보 처리 및 보유 기간은 다음과 같습니다.

☞ 아래 예시를 참고하여 개인정보 처리업무와 개인정보 처리업무에 대한 보유기간 및 관련 법령, 근거 등을 기재합니다.

(예시)- 고객 가입 및 관리 : 서비스 이용계약 또는 회원가입 해지시까지, 다만 채권․채무관계 잔존시에는 해당 채권․채무관계 정산시까지

- 전자상거래에서의 계약․청약철회, 대금결제, 재화 등 공급기록 : 5년

3. 정보주체와 법정대리인의 권리·의무 및 그 행사방법 이용자는 개인정보주체로써 다음과 같은 권리를 행사할 수 있습니다.

① 정보주체는 chyi(‘https://yi-chi.tistory.com/’이하 ‘chyi) 에 대해 언제든지 다음 각 호의 개인정보 보호 관련 권리를 행사할 수 있습니다.

1. 개인정보 열람요구

2. 오류 등이 있을 경우 정정 요구

3. 삭제요구

4. 처리정지 요구



4. 처리하는 개인정보의 항목 작성

 ('https://yi-chi.tistory.com/'이하 'chyi')은(는) 다음의 개인정보 항목을 처리하고 있습니다.



5. 개인정보의 파기('chyi')은(는) 원칙적으로 개인정보 처리목적이 달성된 경우에는 지체없이 해당 개인정보를 파기합니다. 파기의 절차, 기한 및 방법은 다음과 같습니다.

-파기절차
이용자가 입력한 정보는 목적 달성 후 별도의 DB에 옮겨져(종이의 경우 별도의 서류) 내부 방침 및 기타 관련 법령에 따라 일정기간 저장된 후 혹은 즉시 파기됩니다. 이 때, DB로 옮겨진 개인정보는 법률에 의한 경우가 아니고서는 다른 목적으로 이용되지 않습니다.

-파기기한
이용자의 개인정보는 개인정보의 보유기간이 경과된 경우에는 보유기간의 종료일로부터 5일 이내에, 개인정보의 처리 목적 달성, 해당 서비스의 폐지, 사업의 종료 등 그 개인정보가 불필요하게 되었을 때에는 개인정보의 처리가 불필요한 것으로 인정되는 날로부터 5일 이내에 그 개인정보를 파기합니다.



6. 개인정보 자동 수집 장치의 설치•운영 및 거부에 관한 사항

chyi 은 정보주체의 이용정보를 저장하고 수시로 불러오는 ‘쿠키’를 사용하지 않습니다.

7. 개인정보 보호책임자 작성

 chyi(‘https://yi-chi.tistory.com/’이하 ‘chyi) 은(는) 개인정보 처리에 관한 업무를 총괄해서 책임지고, 개인정보 처리와 관련한 정보주체의 불만처리 및 피해구제 등을 위하여 아래와 같이 개인정보 보호책임자를 지정하고 있습니다.

  • ▶ 개인정보 보호책임자
  • 성명 :이치행
  • 직책 :대표
  • 직급 :대표이사
  • 연락처 :01041293909, dti.ctusits@gmail.com,

※ 개인정보 보호 담당부서로 연결됩니다.

  • ▶ 개인정보 보호 담당부서
  • 부서명 :
  • 담당자 :
  • 연락처 :, ,

② 정보주체께서는 chyi(‘https://yi-chi.tistory.com/’이하 ‘chyi) 의 서비스(또는 사업)을 이용하시면서 발생한 모든 개인정보 보호 관련 문의, 불만처리, 피해구제 등에 관한 사항을 개인정보 보호책임자 및 담당부서로 문의하실 수 있습니다. chyi(‘https://yi-chi.tistory.com/’이하 ‘chyi) 은(는) 정보주체의 문의에 대해 지체 없이 답변 및 처리해드릴 것입니다.

8. 개인정보 처리방침 변경

①이 개인정보처리방침은 시행일로부터 적용되며, 법령 및 방침에 따른 변경내용의 추가, 삭제 및 정정이 있는 경우에는 변경사항의 시행 7일 전부터 공지사항을 통하여 고지할 것입니다.



9. 개인정보의 안전성 확보 조치 ('chyi')은(는) 개인정보보호법 제29조에 따라 다음과 같이 안전성 확보에 필요한 기술적/관리적 및 물리적 조치를 하고 있습니다.

1. 정기적인 자체 감사 실시
개인정보 취급 관련 안정성 확보를 위해 정기적(분기 1회)으로 자체 감사를 실시하고 있습니다.

2. 개인정보 취급 직원의 최소화 및 교육
개인정보를 취급하는 직원을 지정하고 담당자에 한정시켜 최소화 하여 개인정보를 관리하는 대책을 시행하고 있습니다.

3. 내부관리계획의 수립 및 시행
개인정보의 안전한 처리를 위하여 내부관리계획을 수립하고 시행하고 있습니다.

4. 해킹 등에 대비한 기술적 대책
<chyi>('chyi')은 해킹이나 컴퓨터 바이러스 등에 의한 개인정보 유출 및 훼손을 막기 위하여 보안프로그램을 설치하고 주기적인 갱신·점검을 하며 외부로부터 접근이 통제된 구역에 시스템을 설치하고 기술적/물리적으로 감시 및 차단하고 있습니다.

5. 개인정보의 암호화
이용자의 개인정보는 비밀번호는 암호화 되어 저장 및 관리되고 있어, 본인만이 알 수 있으며 중요한 데이터는 파일 및 전송 데이터를 암호화 하거나 파일 잠금 기능을 사용하는 등의 별도 보안기능을 사용하고 있습니다.

6. 접속기록의 보관 및 위변조 방지
개인정보처리시스템에 접속한 기록을 최소 6개월 이상 보관, 관리하고 있으며, 접속 기록이 위변조 및 도난, 분실되지 않도록 보안기능 사용하고 있습니다.

7. 개인정보에 대한 접근 제한
개인정보를 처리하는 데이터베이스시스템에 대한 접근권한의 부여,변경,말소를 통하여 개인정보에 대한 접근통제를 위하여 필요한 조치를 하고 있으며 침입차단시스템을 이용하여 외부로부터의 무단 접근을 통제하고 있습니다.

8. 문서보안을 위한 잠금장치 사용
개인정보가 포함된 서류, 보조저장매체 등을 잠금장치가 있는 안전한 장소에 보관하고 있습니다.

9. 비인가자에 대한 출입 통제
개인정보를 보관하고 있는 물리적 보관 장소를 별도로 두고 이에 대해 출입통제 절차를 수립, 운영하고 있습니다.

이게 바로 C등급 화면~! ㅋ

레더 D에서 놀다가 실력좀 키우고 싶어서 

FOX 클랜에 가입후 신규 아이디로 래더 돌리는중 운좋게 C등급으로 올랐네요~!

실력으로 오른 느낌은 아니고 초반 레더 판정이후 운좋게 몇번 이겨서 C까지 간거 같습니다.

스타 잘하는사람 엄청 많아요 클랜분들이랑 하면 1판을 못이기고 있습니다. 

그래서 그런지

여전히 APM은 170 정도 전략도 5해처리 히드라, 973, 3해처리 뮤탈 말고는 아는게 없지만 

항상 꿀잼으로 즐기는중이죠

다들 스타하러 고고~! 

'게임 > 스타크래프트' 카테고리의 다른 글

스타 리마스터 D등급 승급!  (0) 2019.06.16

리마스터 즐긴지 3달이 넘어가고 있는데 여전히 1300대에서 머물고 있는 저그유저 스린이입니다. 

빌드 전혀 모르는사람만 이기게 되고 좀 아시는분 만나면 패배를 반복 ㅠㅜ

좀 이겨보고 싶은마음에 YouTube 스타 강의듣고 플토전 연습한 결과

그결과 드!디!어! D등급 승급 했습니다! ㅎ 

S,A,B,C,D,E,F 에서  겨우 D 등급이지만 이것도 너무 힘드네요 ㅠ

 

 


(강의 영상은 김명운 5해처리 히드라 강의에서 8분까지 그대로 따라했습니다 ㅎ )

 

요즘 스타가 너무 꿀잼이네요ㅎ

'게임 > 스타크래프트' 카테고리의 다른 글

스타 리마스터 C등급 승급!  (0) 2019.09.03

C#에서 using System.Net 를 사용하면 

FTP 접속해서 폴더 유무 확인이 가능합니다.

 

단계는

1. FTP로 접속할 IP, Port, 생성할 폴더명으로 경로를 파라미터로 WebRequest 를 초기화 해줍니다.

2. FTP로 접속을 위한 ID, Password 로 권한을 설정 하구요

3. FtpWebRequest 기능 중 해당 폴더의 하위 파일 목록을 가져오는(ListDirectory)를 대입 합니다.
   (해당 폴더의 하위 파일List를 가져와야 하는데 폴더 자체가 없으면 예외로 빠지기 때문에 해당 폴더의 유무를 알 수 있습니다.)

4. 그 다음 GetResponse() 함수로 FTP로 부터 결과 확인

 

4번 실행 후 예외로 빠지게 된다면

경로 마지막 폴더명 뒤에 / 표시를 안한경우 또는

이미 해당 폴더명으로 존재하거나 ID, Passsword 가 틀린 경우가 많으니 다시 한번 확인해 보세요.

 

# 아래 코드의 절반은 예외처리 내용이기 때문에 실제 기능 구현 코드는 7줄 정도 입니다.

 

코드 예시

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using System.Net;

namespace WindowsFormsApplication2
{
    public class test
    {
        public void checkDirectoryExists()
        {
            string directory = "ftp://???.???.???.??:21/폴더1/";   //ftp://ip:포트/폴더명/; 

            FtpWebRequest requestFTPUploader = (FtpWebRequest)WebRequest.Create(directory);
            requestFTPUploader.Credentials = new NetworkCredential("ID", "PW");             //id, password

            var request = requestFTPUploader;
            request.Method = WebRequestMethods.Ftp.ListDirectory;

            try
            {
                using (var result = (FtpWebResponse)request.GetResponse())
                {
                    result.Close();  //정상 종료
                }
            }
            catch (WebException e)
            {
                FtpWebResponse response = (FtpWebResponse)e.Response;

                if (response.StatusCode == FtpStatusCode.ActionNotTakenFileUnavailable)
                {
                    Console.WriteLine("Does not exist");
                }
                else if (e.Status == WebExceptionStatus.ProtocolError)
                {
                    Console.WriteLine("Status Code : {0}", ((HttpWebResponse)e.Response).StatusCode);
                    Console.WriteLine("Status Description : {0}", ((HttpWebResponse)e.Response).StatusDescription);
                }
                else
                {
                    Console.WriteLine("Error: " + e.Message);
                }
            }

        }

    }
}

 

 

해당 폴더가 존재한다면 GetResponse() 에서 True 를 반환하기 때문에

True 인 경우 FTP네트워크를 닫아 주고 해당 기능 구현을 마무리 했습니다.

 

FTP 폴더 유무 확인은 이런식으로 확인 가능하구요

반대로 FTP 폴더 생성을 하고 싶다면 아래 링크로 고고!

C# FTP 폴더 생성

 

'프로그래밍 > C#' 카테고리의 다른 글

C# FTP 폴더 생성 (FTP remote create directory)  (0) 2018.09.21
C# xml파일 읽기  (0) 2018.09.14
C# FileSystemWatcher 파일 감시 모니터링  (0) 2018.09.12

C#에서 using System.Net 를 사용하면 

FTP 접속해서 폴더 생성이 가능합니다. (mkdir)

 

단계는

1. FTP로 접속할 IP, Port, 생성할 폴더명으로 경로를 파라미터로 WebRequest 를 초기화 해줍니다.

2. FTP로 접속을 위한 ID, Password 로 권한을 설정 하구요

3. FtpWebRequest 기능 중 폴더생성(MakeDirectory)를 대입 합니다.

4. 그 다음 GetResponse() 함수로 FTP로 부터 결과 확인

 

4번 실행 후 예외로 빠지게 된다면

경로 마지막 폴더명 뒤에 / 표시를 안한경우 또는

이미 해당 폴더명으로 존재하거나 ID, Passsword 가 틀린 경우가 많으니 다시 한번 확인해 보세요.

 

코드 예시

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using System.Net;

namespace WindowsFormsApplication2
{
    public class test
    {
        public void FTPUpload()
        {                                                                      //ftp://ip:포트번호/폴더명/
            FtpWebRequest requestFTPUploader = (FtpWebRequest)WebRequest.Create("ftp://???.???.???.??:21/폴더1/");

            requestFTPUploader.Credentials = new NetworkCredential("ID", "PW");

            var request = requestFTPUploader;

            request.Method = WebRequestMethods.Ftp.MakeDirectory;

            try
            {
                using (var resp = (FtpWebResponse)request.GetResponse())
                {
                    resp.Close();
                }
            }
            catch (WebException e)
            {                
            }
           
        }

    }
}

 

 

정상적으로 폴더를 생성했다면 GetResponse() 에서 True 를 반환하기 때문에

True 인 경우 FTP네트워크를 닫아 주고 해당 기능 구현을 마무리 했습니다.

 

위 코드로 폴더를 생성시 계층적으로 단계별로 만들어야 합니다.

예를 들어 현재 FTP A폴더 내부가 비어 있는 상태에서

A폴더/B폴더/C폴더((ftp://~/A폴더1/B폴더/C폴더/) 디렉토리 구조를 만들기 위해서

A폴더/B폴더/C폴더/ 이렇게 한번에 진행하면 예외로 빠집니다.

단계적으로 기존 A폴더가 있는 상태에서 A폴더/B폴더/ 로 만든 다음

A폴더/B폴더/C폴더/로 만들어야 합니다.

 

'프로그래밍 > C#' 카테고리의 다른 글

C# FTP 폴더 유무 확인 (FTP remote Check Folder)  (0) 2018.09.21
C# xml파일 읽기  (0) 2018.09.14
C# FileSystemWatcher 파일 감시 모니터링  (0) 2018.09.12

+ Recent posts