건축 디렉토리에서 문자열 부품 C#
-
02-07-2019 - |
문제
가 있는 경우 많은 디렉토리의 이름 중 하나로 문자열이나 포함되는 변수에 있는 가장 쉬운 방법은 무엇입니까 결합의 이러한 전체 경로?
나의 알
Path.Combine하지만 이것은 단지 2 매개 변수 문자열,저는 솔루션이 필요할 수 있는 어떤 숫자의 번호를 directory 매개 변수입니다.
e.g:
string folder1 = "foo"; string folder2 = "bar"; CreateAPath("C:", folder1, folder2, folder1, folder1, folder2, "MyFile.txt")
어떤 아이디어가?은 C#을 지원한 args 에서는 방법?
해결책
C#은 메소드에서 무제한 ARG를 지원합니까?
예, Params 키워드를 살펴보십시오. 이와 같은 (테스트되지 않은)와 같이 Path.comBine을 호출하는 함수를 쉽게 작성할 수 있습니다.
string CombinePaths(params string[] parts) {
string result = String.Empty;
foreach (string s in parts) {
result = Path.Combine(result, s);
}
return result;
}
다른 팁
다시 구조를 위해 Linq. 그만큼 골재 확장 기능을 사용하여 원하는 것을 달성 할 수 있습니다. 이 예를 고려하십시오 :
string[] ary = new string[] { "c:\\", "Windows", "System" };
string path = ary.Aggregate((aggregation, val) => Path.Combine(aggregation, val));
Console.WriteLine(path); //outputs c:\Windows\System
내가 사용하는 것을 선호 또는 파일 이름이 시 대정적 방법에 디렉터리 생각하기 때문에,그것의 더 나은 OO 디자인이다.여기에 솔루션 또는 파일 이름이 시+장 방법,즉 생각은 매우 좋은 사용:
public static DirectoryInfo Subdirectory(this DirectoryInfo self, params string[] subdirectoryName)
{
Array.ForEach(
subdirectoryName,
sn => self = new DirectoryInfo(Path.Combine(self.FullName, sn))
);
return self;
}
내가 사랑하지 않는다는 사실 나는 수정 self
, 지만,이것에 대한 짧은 방법,나는 그것보다 더 깨끗하고 새로운 변수입니다.
호출 사이트를 만든지만,그것:
DirectoryInfo di = new DirectoryInfo("C:\\")
.Subdirectory("Windows")
.Subdirectory("System32");
DirectoryInfo di2 = new DirectoryInfo("C:\\")
.Subdirectory("Windows", "System32");
추가를 얻을 수 있는 방법 FileInfo 은 왼쪽으로는 운동(에 대한 다른 질문입니다!).
이거 한번 해봐:
public static string CreateDirectoryName(string fileName, params string[] folders)
{
if(folders == null || folders.Length <= 0)
{
return fileName;
}
string directory = string.Empty;
foreach(string folder in folders)
{
directory = System.IO.Path.Combine(directory, folder);
}
directory = System.IO.Path.Combine(directory, fileName);
return directory;
}
매개 변수는 무한 양의 문자열을 추가 할 수 있도록합니다.
Path.comBine은 입력 된 문자열이 슬래시로 시작하거나 끝나지 않도록하는 것입니다.
제휴하지 않습니다 StackOverflow