Posts C# - 하위 폴더, 파일들의 절대 경로 찾기
Post
Cancel

C# - 하위 폴더, 파일들의 절대 경로 찾기

Summary


  • 재귀를 이용하여 특정 폴더 하위 경로에 있는 파일, 폴더 전체 경로 찾기


Source Code


Usage

1
2
string folder = FindFolderAbsPath(@"c:\MyFolder", "FolderName");
string file = FindFileAbsPath(@"c:\MyFolder", "FileName.txt");


Code

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
/// <summary> 특정 폴더의 모든 하위 경로에서 이름이 일치하는 폴더의 절대 경로 찾기 </summary>
private string FindFolderAbsPath(string rootFolderPath, string folderName)
{
    DirectoryInfo rootDirectory = Directory.CreateDirectory(rootFolderPath);
    string found = null;

    Local_FindDirectoryAbsPath(rootDirectory);
    return found;

    // 내부 재귀 메소드
    void Local_FindDirectoryAbsPath(DirectoryInfo currentDirectory)
    {
        if (found != null) return;

        // 일치하는 폴더명 찾은 경우
        if (currentDirectory.Name == folderName)
        {
            found = currentDirectory.FullName;
            return;
        }

        // 하위 폴더들 재귀 탐색
        DirectoryInfo[] subFolders = currentDirectory.GetDirectories();
        foreach (var folder in subFolders)
        {
            Local_FindDirectoryAbsPath(folder);
        }
    }
}
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
/// <summary> 특정 폴더의 모든 하위 경로에서 이름이 일치하는 파일의 절대 경로 찾기 </summary>
private string FindFileAbsPath(string rootFolderPath, string fileName)
{
    DirectoryInfo rootDirectory = Directory.CreateDirectory(rootFolderPath);
    string found = null;

    Local_FindDirectoryAbsPath(rootDirectory);
    return found;

    // 내부 재귀 메소드
    void Local_FindDirectoryAbsPath(DirectoryInfo currentDirectory)
    {
        if (found != null) return;

        // 현재 디렉토리 내부 파일들 탐색
        FileInfo[] files = currentDirectory.GetFiles();
        foreach (var file in files)
        {
            if (file.Name == fileName)
            {
                found = file.FullName;
                return;
            }
        }

        // 하위 폴더들 재귀 탐색
        DirectoryInfo[] subFolders = currentDirectory.GetDirectories();
        foreach (var folder in subFolders)
        {
            Local_FindDirectoryAbsPath(folder);
        }
    }
}
This post is licensed under CC BY 4.0 by the author.