C#.NET Q&A

반복문을 정리하고 싶습니다. 평점: 없음 조회: 314

하위폴더가 없을때까지 하위폴더를 찾아가려고 합니다.

 

그리고 마지막 하위폴더가 없는곳에서 파일목록을 가져오려합니다.

폴더-폴더-폴더-폴더-????-폴더-폴더-파일

하위폴더가 몇개있을진 알수가 없습니다.

 

 

하위폴더 리스트와, 파일리스트를 가져오는 함수 두개를 만들고,

 

          private string[] GetDirectory(string sDN)

        {

            string[] str = new string[10];

            int nCnt = 0;

            System.IO.DirectoryInfo di = new System.IO.DirectoryInfo(sDN);

            foreach (var item1 in di.GetDirectories())

            {

                str[nCnt] = item1.FullName;

                nCnt++;

            }

 

            string[] strD = new string[nCnt];

            for (int i = 0; i < nCnt; i++)

            {

                strD[i] = str[i];

            }

 

            return strD;

        }

 

        private string[] GetFileName(string sDN)

        {

            string[] str = new string[10];

            int nCnt = 0;

            System.IO.DirectoryInfo di = new System.IO.DirectoryInfo(sDN);

            foreach (var item1 in di.GetFiles())

            {

                str[nCnt] = item1.FullName;

                nCnt++;

            }

            string[] strD = new string[nCnt];

            for (int i = 0; i < nCnt; i++)

            {

                strD[i] = str[i];

            }

 

            return strD;

        }

 

 

 

폴더 검색을 하는 함수입니다.

이곳에서 반복적으로 검사를 하게되는데,

결국 
///////////////////////////////////////////

str = GetDirectory(str[i]);

if (str.Length > 0)

{

}

else

{

    str2 = GetFileName(str[i]);

    for (int j2 = 0; j2 < str2.Length; j2++)

   {

        MessageBox.Show(str2[j2]);

   }

}
////////////////////////////////////////////////////

이 내용이 반복적으로 들어가게 되는데요.

 

이걸 간단하게 정리가 가능할까요?

아니면 다른 방법이 있을까요?

 

          private void SearchFile(string sData)

        {

            string[] str = GetDirectory(sData);

            string[] str2 = new string[0];

            if (str.Length > 0)

            {

                for (int i = 0; i < str.Length; i++)

                {

                        string[] str3 = GetDirectory(str[i]);

                    if (str3.Length > 0)

                    {

                             for (int j = 0; j < str3.Length; j++)

                        {

                            string[] str4 = GetDirectory(str3[j]);

                            if (str4.Length > 0)

                            {

                            }

                            else

                            {

                                str2 = GetFileName(str3[j]);

                                for (int j2 = 0; j2 < str2.Length; j2++)

                                {

                                    MessageBox.Show(str2[j2]);

                                }

                            }

                        }

                    }

                    else

                    {

                        str2 = GetFileName(str[i]);

                        for (int j2 = 0; j2 < str2.Length; j2++)

                        {

                            MessageBox.Show(str2[j2]);

                        }

                    }

                }

            }

            else

            {

                str2 = GetFileName(sData);

                for (int j2 = 0; j2 < str2.Length; j2++)

                {

                    MessageBox.Show(str2[j2]);

                }

            }

        }

 
 

태그 : 하위폴더 C#반복문,
작성자 정보

Level 9
 [EXP.10/14]

메일:  비공개
글등록 +12 72 덧글등록 +3 12
자기소개
안녕하세요
글 공유하기 |
  tweet facebook
2019-04-18 오후 3:36:01
나도한마디
사용자
지후니파파            [2019-04-18]
Level 33
 [EXP.63/80]
어려운건 아닌데 의도를 정확하게 알아야...
폴더-폴더-폴더-파일 <---이런 구조면 노멀한데....

ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
No1.폴더-폴더1-폴더-폴더-파일
No2.------폴더2-폴더-파일
No3.------폴더3-폴더-폴더-폴더-폴더-파일없음
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
위와 같은땐 No1,No2,No3 중에 누구인지?
아니면 파일이 있는 모든 폴더를 조사하는건지?...
사용자
           [2019-04-18]
Level 9
 [EXP.10/14]
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
No1.폴더-폴더1-폴더-폴더-파일
No2.------폴더2-폴더-파일
No3.------폴더3-폴더-폴더-폴더-폴더-파일없음
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ

이런형식입니다. no1,no2,no3 다 찾아야합니다.
이게 no 몇까지 있는진 알수가없는상태고요.

하위폴더가 몇개가 있는진 알수없고

하위폴더가 없는 제일 마지막에 존재하는 파일만 찾는것입니다.
사용자
지후니파파            [2019-04-18]
Level 33
 [EXP.63/80]
근데 구글에서 key word만 쳐도 잘 나오는걸텐데...
c# 하위 폴더 파일 리스트 이렇게만 쳐도 sample이 넘처날거 같은....
사용자
           [2019-04-18]
Level 9
 [EXP.10/14]
그냥 하위파일리스트는 많은데 하위에하위에하위 를 찾는건 쉽지않더라고요..

Stack을 사용해서 하는 방법을 찾아서 테스트 하고있습니다..
사용자
지후니파파            [2019-04-19]
Level 33
 [EXP.63/80]
검색옵션을 all로하시면 하위폴더 리스트 다 찾을수 있는데요.
사용자
지후니파파            [2019-04-19]
Level 33
 [EXP.63/80]
DirectoryInfo dic = new DirectoryInfo(path);

FileInfo[] files = dic.GetFiles("*",SearchOption.AllDirectories);


이렇게만해도 거의 원하는거 다 되신거 같은데...

사용자
Template            [2019-04-19]
Level 1
 [EXP.9/16]
public static IEnumerable<string> SearchAllFile(string path)
{
System.IO.DirectoryInfo di = new System.IO.DirectoryInfo(path);

List<string> filename = new List<string>();

foreach (var item1 in di.GetDirectories())
{
di = new System.IO.DirectoryInfo(item1.FullName);

if (di.GetDirectories().Count() == 0)
{
foreach (var item2 in di.GetFiles())
{
yield return item2.FullName;
}
}
else
{
foreach (var item3 in SearchAllFile(di.FullName))
{
yield return item3;
}
}
}
}

public static void Main(string[] args)
{
string sData = @"C:\Users\dklee\Desktop\Test";
foreach (var mi in SearchAllFile(sData))
{
Console.WriteLine(mi);
}
}
사용자
Template            [2019-04-19]
Level 1
 [EXP.9/16]
초보 개발자 입니다. 지나가다가 소스코드 한번 짜봤는데, 원하시는게 맞는지 모르겠네요. Directory 내부를 돌면서 모든 파일명에 대해서 출력을 하도록 소스를 짜봤습니다.
태그로 엮인글
글리스트
wpf에서 ftp로 이미지를 업로드하는 중  민성
Datagridview 에 지정한 컬럼을 콤보박스로 변환하고 싶습니다.[2]+1  닷지
C# 라벨 배열 일괄 추가 방법 문의(For 문 등...)[1]  유델델리
c# 병렬처리 질문[1]  윈드찡
c# 구조체 배열 질문[3]+1  엘리엇
C#에서 작성한 DLL 디버깅 어찌 합니까..[1] 
안녕하세요 호(arc)와 선분 충돌여부 구하는 수학공식이나 소스 관련  카브로
TablelayoutPanel Cell Size 동일 하게.. 
Thread.Sleep 작동 중 중지하는 방법이 궁금합니다.[3]+2  Mr황
Visual studio 같은 창분리 및 배치하는 UI 만들기 가능한가요?[2]  오마르
 ★현재글->   반복문을 정리하고 싶습니다.[5]+3 
실행파일 UAC 관리자계정 없이 실행.[1]+3  앨원
c# ms chart X축 넓이를 고정시켜버리고 싶은데  엘리엇
ToolStripButton CheckOnClick  고수도초보부터
컨트롤 동작 순서를 결정할 수 있을까요?[1]+2  진화가필요해
유저컨트롤 질문드려요[2]+1  키모
[초보질문]C#을 이용해서 BOM을 구성할때[1]+3  강화5연대
윈폼 그리드뷰, 버튼 등의 속성 값 적용 시[1]  캘거리
C# 통신의Receive에 관한 질문이 있습니다.[2]  프린이
스트링 작업도움바랍니다[1]  엿장수
윈폼에서 이미지 메타데이터 읽기  jjin96