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);
}
}
}